Module: CarrierWave::Backgrounder::ORM::Base
- Included in:
- ActiveRecord, DataMapper, Mongoid
- Defined in:
- lib/backgrounder/orm/base.rb
Overview
Base class for all things orm
Instance Method Summary collapse
-
#process_in_background(column, worker = ::CarrierWave::Workers::ProcessAsset) ⇒ Object
User#process_in_background will process and create versions in a background process.
-
#store_in_background(column, worker = ::CarrierWave::Workers::StoreAsset) ⇒ Object
#store_in_background will process, version and store uploads in a background process.
Instance Method Details
#process_in_background(column, worker = ::CarrierWave::Workers::ProcessAsset) ⇒ Object
User#process_in_background will process and create versions in a background process.
class User < ActiveRecord::Base
mount_uploader :avatar, AvatarUploader
process_in_background :avatar
end
The above adds a User#process_upload method which can be used at times when you want to bypass background storage and processing.
@user.process_avatar = true
@user.save
You can also pass in your own workers using the second argument in case you need other things done during processing.
class User < ActiveRecord::Base
mount_uploader :avatar, AvatarUploader
process_in_background :avatar, CustomWorker
end
In addition you can also add a column to the database appended by _processing with a type of boolean which can be used to check if processing is complete.
def self.up
add_column :users, :avatar_processing, :boolean
end
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/backgrounder/orm/base.rb', line 41 def process_in_background(column, worker=::CarrierWave::Workers::ProcessAsset) send :before_save, :"set_#{column}_processing", :if => :"trigger_#{column}_background_processing?" send :after_save, :"enqueue_#{column}_background_job", :if => :"trigger_#{column}_background_processing?" class_eval <<-RUBY, __FILE__, __LINE__ + 1 attr_accessor :process_#{column}_upload def set_#{column}_processing self.#{column}_processing = true if respond_to?(:#{column}_processing) end def enqueue_#{column}_background_job CarrierWave::Backgrounder.enqueue_for_backend(#{worker}, self.class.name, id.to_s, #{column}.mounted_as) end def trigger_#{column}_background_processing? process_#{column}_upload != true end RUBY end |
#store_in_background(column, worker = ::CarrierWave::Workers::StoreAsset) ⇒ Object
#store_in_background will process, version and store uploads in a background process.
class User < ActiveRecord::Base
mount_uploader :avatar, AvatarUploader
store_in_background :avatar
end
The above adds a User#process_<column>_upload method which can be used at times when you want to bypass background storage and processing.
@user.process_avatar_upload = true
@user.save
You can also pass in your own workers using the second argument in case you need other things done during processing.
class User < ActiveRecord::Base
mount_uploader :avatar, AvatarUploader
store_in_background :avatar, CustomWorker
end
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/backgrounder/orm/base.rb', line 85 def store_in_background(column, worker=::CarrierWave::Workers::StoreAsset) send :after_save, :"enqueue_#{column}_background_job", :if => :"trigger_#{column}_background_storage?" class_eval <<-RUBY, __FILE__, __LINE__ + 1 attr_accessor :process_#{column}_upload def write_#{column}_identifier super() and return if process_#{column}_upload self.#{column}_tmp = _mounter(:#{column}).cache_name if _mounter(:#{column}).cache_name end def store_#{column}! super() if process_#{column}_upload end def enqueue_#{column}_background_job CarrierWave::Backgrounder.enqueue_for_backend(#{worker}, self.class.name, id.to_s, #{column}.mounted_as) end def trigger_#{column}_background_storage? process_#{column}_upload != true end RUBY end |