class Paperclip::Meta::ProcessMetaService

Attributes

logger[RW]

Public Class Methods

new(logger = nil) click to toggle source
# File lib/paperclip/meta/process_meta_service.rb, line 14
def initialize(logger = nil)
  @logger = logger
end
process!(logger = nil) click to toggle source
# File lib/paperclip/meta/process_meta_service.rb, line 6
def self.process!(logger = nil)
  class_names = ENV['CLASSES'] || ENV['classes'] || ""
  classes = class_names.split(',').map { |class_name| Paperclip.class_for(class_name) }
  self.new(logger).process!(*classes)
end

Public Instance Methods

process!(*classes) click to toggle source
# File lib/paperclip/meta/process_meta_service.rb, line 18
def process!(*classes)
  classes.each do |klass|
    process_class(klass)
  end
end

Private Instance Methods

attachment_styles_to_io_adapters(attachment) click to toggle source
# File lib/paperclip/meta/process_meta_service.rb, line 53
def attachment_styles_to_io_adapters(attachment)
  io_hash = attachment.styles.reduce({}) do |hash, (style_name, style)|
    hash[style_name] = Paperclip.io_adapters.for(style)
    hash
  end

  unless io_hash.has_key?(:original)
    io_hash[:original] = Paperclip.io_adapters.for(attachment)
  end

  io_hash
end
log(*args) click to toggle source
# File lib/paperclip/meta/process_meta_service.rb, line 66
def log(*args)
  logger.info(*args) if logger
end
process_attachment(instance, attachment_name) click to toggle source
# File lib/paperclip/meta/process_meta_service.rb, line 39
def process_attachment(instance, attachment_name)
  meta_attribute_name = "#{attachment_name}_meta"
  return unless instance.respond_to?(meta_attribute_name)

  attachment = instance.send(attachment_name)
  io_hash = attachment_styles_to_io_adapters(attachment)
  attachment.process_meta_for_styles(io_hash)
  if instance.respond_to?(:update_column)
    instance.update_column(meta_attribute_name, instance.send(meta_attribute_name))
  elsif instance.respond_to?(:update_attribute)
    instance.update_attribute(meta_attribute_name, instance.send(meta_attribute_name))
  end
end
process_class(klass) click to toggle source
# File lib/paperclip/meta/process_meta_service.rb, line 26
def process_class(klass)
  attachments = Paperclip::AttachmentRegistry.names_for(klass)
  raise "Class #{klass.name} has no attachments specified" if attachments.empty?

  klass.unscoped.each do |instance|
    log("Processing image meta data for #{instance.class}.#{instance.id}")
    attachments.each do |attachment_name|
      next if instance.send(attachment_name).blank?
      process_attachment(instance, attachment_name)
    end
  end
end