lib/backgrounder/orm/data_mapper.rb
module CarrierWave
module Backgrounder
module ORM
module DataMapper
include CarrierWave::Backgrounder::ORM::Base
def process_in_background(column, worker=::CarrierWave::Workers::ProcessAsset)
super
class_eval <<-RUBY, __FILE__, __LINE__ + 1
def set_#{column}_processing
@#{column}_changed = attribute_dirty?(:#{column})
self.#{column}_processing = true if respond_to?(:#{column}_processing)
end
RUBY
end
def store_in_background(column, worker=::CarrierWave::Workers::StoreAsset)
super
class_eval <<-RUBY, __FILE__, __LINE__ + 1
def set_#{column}_changed
@#{column}_changed = attribute_dirty?(:#{column})
end
def write_#{column}_identifier
super and return if process_#{column}_upload
self.#{column}_tmp = #{column}_cache
end
RUBY
end
private
def _define_shared_backgrounder_methods(mod, column, worker)
before :save, :"set_#{column}_changed"
after :save, :"enqueue_#{column}_background_job"
super
class_eval <<-RUBY, __FILE__, __LINE__ + 1
attr_reader :#{column}_changed
def enqueue_#{column}_background_job
if enqueue_#{column}_background_job?
CarrierWave::Backgrounder.enqueue_for_backend(#{worker}, self.class.name, id, #{column}.mounted_as)
@#{column}_changed = false
end
end
def #{column}_updated?
#{column}_changed
end
RUBY
end
end # DataMapper
end #ORM
end #Backgrounder
end #CarrierWave
DataMapper::Model.append_extensions ::CarrierWave::Backgrounder::ORM::DataMapper