Sha256: af81c486c6417709f6804b3438ac2a1e24ce2746195f9348e8bd66967ea8fa13

Contents?: true

Size: 1.46 KB

Versions: 1

Compression:

Stored size: 1.46 KB

Contents

require 'set'
require 'tempfile'
require 'paperclip'
require 'joint'

module Paperclip
  class << self
    def log *args
    end
  end
end

module Roachclip
  autoload :Version, 'roachclip/version'

  class InvalidAttachment < StandardError; end

  def self.configure(model)
    model.plugin Joint
    model.class_inheritable_accessor :roaches
    model.roaches = Set.new
  end

  module ClassMethods
    def roachclip name, options
      self.attachment name

      raise InvalidAttachment unless attachment_names.include?(name)

      self.roaches << {:name => name, :options => options}
 
      options[:styles].each { |k,v| self.attachment "#{name}_#{k}"}

      before_save    :process_roaches
    end
  end

  module InstanceMethods
    def process_roaches
      roaches.each do |img|
        name = img[:name]
        styles = img[:options][:styles]

        return unless assigned_attachments[name]

        src = Tempfile.new ["roachclip", name.to_s].join('.')
        src.write assigned_attachments[name].read
        src.close
        
        assigned_attachments[name].rewind

        styles.keys.each do |style_key|
          thumbnail = Paperclip::Thumbnail.new src, styles[style_key]
          tmp_file_name = thumbnail.make
          stored_file_name = send("#{name}_name").gsub(/\.(\w*)\Z/) { "_#{style_key}.#{$1}" }
          send "#{name}_#{style_key}=", tmp_file_name
          send "#{name}_#{style_key}_name=", stored_file_name
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
roachclip-0.1.0 lib/roachclip.rb