diff --git a/lib/delayed_paperclip.rb b/lib/delayed_paperclip.rb index 047126e..2cd5379 100644 --- a/lib/delayed_paperclip.rb +++ b/lib/delayed_paperclip.rb @@ -10,7 +10,10 @@ def options :background_job_class => DelayedPaperclip::ProcessJob, :url_with_processing => true, :processing_image_url => nil, - :queue => "paperclip" + :queue => "paperclip", + :post_processing_callback => nil, + :pre_processing_callback => nil, + :post_update_callback => nil } end @@ -54,7 +57,10 @@ def process_in_background(name, options = {}) :only_process => only_process_default, :url_with_processing => DelayedPaperclip.options[:url_with_processing], :processing_image_url => DelayedPaperclip.options[:processing_image_url], - :queue => DelayedPaperclip.options[:queue] + :queue => DelayedPaperclip.options[:queue], + :post_processing_callback => nil, + :pre_processing_callback => nil, + :post_update_callback => nil }.each do |option, default| paperclip_definitions[name][:delayed][option] = options.key?(option) ? options[option] : default end diff --git a/lib/delayed_paperclip/attachment.rb b/lib/delayed_paperclip/attachment.rb index 2b6f8d1..08ebb97 100644 --- a/lib/delayed_paperclip/attachment.rb +++ b/lib/delayed_paperclip/attachment.rb @@ -48,11 +48,14 @@ def delayed_only_process end def process_delayed! + run_callback :pre_processing_callback self.job_is_processing = true self.post_processing = true reprocess!(*delayed_only_process) + run_callback :post_processing_callback self.job_is_processing = false update_processing_column + run_callback :post_update_callback end def processing_image_url @@ -85,5 +88,24 @@ def update_processing_column end end + def run_callback(callback_name) + execute_callback delayed_options[callback_name] + end + + def execute_callback(callback) + case callback + when Proc + callback.call self + when Symbol, String + method = instance.method callback + arity = method.arity + if arity == 1 + method.call self + else + method.call + end + end + end + end end diff --git a/spec/delayed_paperclip/attachment_spec.rb b/spec/delayed_paperclip/attachment_spec.rb index 0a5cf6f..8c924cb 100644 --- a/spec/delayed_paperclip/attachment_spec.rb +++ b/spec/delayed_paperclip/attachment_spec.rb @@ -15,7 +15,10 @@ :only_process => [], :url_with_processing => true, :processing_image_url => nil, - :queue => "paperclip" + :queue => "paperclip", + :post_processing_callback => nil, + :post_update_callback => nil, + :pre_processing_callback => nil }) end end diff --git a/spec/delayed_paperclip/class_methods_spec.rb b/spec/delayed_paperclip/class_methods_spec.rb index 52dc1e1..d2a8877 100644 --- a/spec/delayed_paperclip/class_methods_spec.rb +++ b/spec/delayed_paperclip/class_methods_spec.rb @@ -18,7 +18,10 @@ :only_process => [], :url_with_processing => true, :processing_image_url => nil, - :queue => "paperclip"} + :queue => "paperclip", + :post_processing_callback => nil, + :post_update_callback => nil, + :pre_processing_callback => nil } } } end @@ -31,7 +34,10 @@ :only_process => [], :url_with_processing => true, :processing_image_url => nil, - :queue => "custom"} + :queue => "custom", + :post_processing_callback => nil, + :post_update_callback => nil, + :pre_processing_callback => nil } } }) end @@ -48,7 +54,10 @@ :only_process => [], :url_with_processing => true, :processing_image_url => "/processing/url", - :queue => "paperclip"} + :queue => "paperclip", + :post_processing_callback => nil, + :post_update_callback => nil, + :pre_processing_callback => nil } } } end @@ -68,7 +77,10 @@ :only_process => [:small, :large], :url_with_processing => true, :processing_image_url => nil, - :queue => "paperclip"} + :queue => "paperclip", + :post_processing_callback => nil, + :post_update_callback => nil, + :pre_processing_callback => nil } } } end diff --git a/spec/delayed_paperclip_spec.rb b/spec/delayed_paperclip_spec.rb index a9650d9..756ed37 100644 --- a/spec/delayed_paperclip_spec.rb +++ b/spec/delayed_paperclip_spec.rb @@ -10,7 +10,10 @@ DelayedPaperclip.options.should == {:background_job_class => DelayedPaperclip::ProcessJob, :url_with_processing => true, :processing_image_url => nil, - :queue => "paperclip"} + :queue => "paperclip", + :post_processing_callback => nil, + :post_update_callback => nil, + :pre_processing_callback => nil } end end @@ -58,9 +61,12 @@ :only_process => [], :url_with_processing => true, :processing_image_url => nil, - :queue => "paperclip"} + :queue => "paperclip", + :post_processing_callback => nil, + :post_update_callback => nil, + :pre_processing_callback => nil } } }) end end -end \ No newline at end of file +end