Commit 3acc4a9c

mo k <mo@mokhan.ca>
2012-10-07 14:32:09
use delayed_job to process the additional photo upload.
1 parent b42009a
Changed files (3)
app
lib
carrier_wave
app/models/photo.rb
@@ -2,4 +2,6 @@ class Photo < ActiveRecord::Base
   belongs_to :creation
   validates :image,  :presence => true
   mount_uploader :image, PhotoUploader
+
+  after_save :enqueue
 end
app/uploaders/photo_uploader.rb
@@ -1,6 +1,8 @@
 # encoding: utf-8
+require File.join(Rails.root, "lib", "carrier_wave", "delayed_job")
 
 class PhotoUploader < CarrierWave::Uploader::Base
+  include CarrierWave::Delayed::Job
   include CarrierWave::RMagick
   include CarrierWave::MimeTypes
 
lib/carrier_wave/delayed_job.rb
@@ -0,0 +1,46 @@
+module CarrierWave
+  module Delayed
+    module Job
+      module ActiveRecordInterface
+        def delay_carrierwave
+          @delay_carrierwave ||= true
+        end
+
+        def delay_carrierwave=(delay)
+          @delay_carrierwave = delay
+        end
+
+        def perform
+          asset_name = self.class.uploader_options.keys.first
+          self.send(asset_name).versions.each_pair do |key, value|
+            value.process_without_delay!
+          end
+        end
+
+        private
+
+        def enqueue
+          ::Delayed::Job.enqueue self
+        end
+      end
+
+      def self.included(base)
+        base.extend ClassMethods
+      end
+
+      module ClassMethods
+        def self.extended(base)
+          base.send(:include, InstanceMethods)
+          base.alias_method_chain :process!, :delay
+          ::ActiveRecord::Base.send(:include, CarrierWave::Delayed::Job::ActiveRecordInterface)
+        end
+
+        module InstanceMethods
+          def process_with_delay!(new_file)
+            process_without_delay!(new_file) unless model.delay_carrierwave
+          end
+        end
+      end
+    end
+  end
+end