delayed_paperclip 2.6.0.0 → 2.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +7 -0
  3. data/.rbenv-version +1 -0
  4. data/.ruby-gemset +1 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +27 -0
  7. data/Appraisals +15 -0
  8. data/CONTRIBUTING +19 -0
  9. data/ChangeLog +4 -0
  10. data/Gemfile +11 -0
  11. data/Rakefile +7 -2
  12. data/delayed_paperclip.gemspec +26 -0
  13. data/gemfiles/paperclip3_5.gemfile +11 -0
  14. data/gemfiles/paperclip3_5.gemfile.lock +160 -0
  15. data/gemfiles/rails3.gemfile +10 -0
  16. data/gemfiles/rails3.gemfile.lock +151 -0
  17. data/gemfiles/rails3_1.gemfile +10 -0
  18. data/gemfiles/rails3_1.gemfile.lock +161 -0
  19. data/gemfiles/rails3_2.gemfile +10 -0
  20. data/gemfiles/rails3_2.gemfile.lock +159 -0
  21. data/lib/delayed_paperclip/attachment.rb +9 -7
  22. data/lib/delayed_paperclip/jobs/delayed_job.rb +2 -2
  23. data/lib/delayed_paperclip/jobs.rb +2 -2
  24. data/lib/delayed_paperclip/railtie.rb +5 -0
  25. data/lib/delayed_paperclip/url_generator.rb +15 -2
  26. data/lib/delayed_paperclip/version.rb +3 -0
  27. data/lib/delayed_paperclip.rb +28 -17
  28. data/spec/delayed_paperclip/attachment_spec.rb +153 -0
  29. data/spec/delayed_paperclip/class_methods_spec.rb +85 -0
  30. data/spec/delayed_paperclip/instance_methods_spec.rb +80 -0
  31. data/spec/delayed_paperclip/url_generator_spec.rb +171 -0
  32. data/spec/delayed_paperclip_spec.rb +56 -0
  33. data/spec/fixtures/12k.png +0 -0
  34. data/spec/integration/delayed_job_spec.rb +55 -0
  35. data/spec/integration/examples/base.rb +316 -0
  36. data/spec/integration/resque_spec.rb +40 -0
  37. data/spec/integration/sidekiq_spec.rb +48 -0
  38. data/spec/spec_helper.rb +86 -0
  39. data/test/base_delayed_paperclip_test.rb +3 -3
  40. data/test/test_helper.rb +14 -7
  41. metadata +84 -51
@@ -0,0 +1,159 @@
1
+ PATH
2
+ remote: ..
3
+ specs:
4
+ delayed_paperclip (2.6.1)
5
+ paperclip (>= 3.3.0)
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ actionmailer (3.2.13)
11
+ actionpack (= 3.2.13)
12
+ mail (~> 2.5.3)
13
+ actionpack (3.2.13)
14
+ activemodel (= 3.2.13)
15
+ activesupport (= 3.2.13)
16
+ builder (~> 3.0.0)
17
+ erubis (~> 2.7.0)
18
+ journey (~> 1.0.4)
19
+ rack (~> 1.4.5)
20
+ rack-cache (~> 1.2)
21
+ rack-test (~> 0.6.1)
22
+ sprockets (~> 2.2.1)
23
+ activemodel (3.2.13)
24
+ activesupport (= 3.2.13)
25
+ builder (~> 3.0.0)
26
+ activerecord (3.2.13)
27
+ activemodel (= 3.2.13)
28
+ activesupport (= 3.2.13)
29
+ arel (~> 3.0.2)
30
+ tzinfo (~> 0.3.29)
31
+ activeresource (3.2.13)
32
+ activemodel (= 3.2.13)
33
+ activesupport (= 3.2.13)
34
+ activesupport (3.2.13)
35
+ i18n (= 0.6.1)
36
+ multi_json (~> 1.0)
37
+ appraisal (0.5.2)
38
+ bundler
39
+ rake
40
+ arel (3.0.2)
41
+ builder (3.0.4)
42
+ celluloid (0.14.1)
43
+ timers (>= 1.0.0)
44
+ climate_control (0.0.3)
45
+ activesupport (>= 3.0)
46
+ cocaine (0.5.1)
47
+ climate_control (>= 0.0.3, < 1.0)
48
+ connection_pool (1.0.0)
49
+ delayed_job (3.0.5)
50
+ activesupport (~> 3.0)
51
+ delayed_job_active_record (0.4.4)
52
+ activerecord (>= 2.1.0, < 4)
53
+ delayed_job (~> 3.0)
54
+ diff-lcs (1.2.4)
55
+ erubis (2.7.0)
56
+ hike (1.2.2)
57
+ i18n (0.6.1)
58
+ journey (1.0.4)
59
+ json (1.8.0)
60
+ mail (2.5.4)
61
+ mime-types (~> 1.16)
62
+ treetop (~> 1.4.8)
63
+ metaclass (0.0.1)
64
+ mime-types (1.23)
65
+ mocha (0.14.0)
66
+ metaclass (~> 0.0.1)
67
+ mono_logger (1.1.0)
68
+ multi_json (1.7.5)
69
+ paperclip (3.5.0)
70
+ activemodel (>= 3.0.0)
71
+ activesupport (>= 3.0.0)
72
+ cocaine (~> 0.5.0)
73
+ mime-types
74
+ polyglot (0.3.3)
75
+ rack (1.4.5)
76
+ rack-cache (1.2)
77
+ rack (>= 0.4)
78
+ rack-protection (1.5.0)
79
+ rack
80
+ rack-ssl (1.3.3)
81
+ rack
82
+ rack-test (0.6.2)
83
+ rack (>= 1.0)
84
+ rails (3.2.13)
85
+ actionmailer (= 3.2.13)
86
+ actionpack (= 3.2.13)
87
+ activerecord (= 3.2.13)
88
+ activeresource (= 3.2.13)
89
+ activesupport (= 3.2.13)
90
+ bundler (~> 1.0)
91
+ railties (= 3.2.13)
92
+ railties (3.2.13)
93
+ actionpack (= 3.2.13)
94
+ activesupport (= 3.2.13)
95
+ rack-ssl (~> 1.3.2)
96
+ rake (>= 0.8.7)
97
+ rdoc (~> 3.4)
98
+ thor (>= 0.14.6, < 2.0)
99
+ rake (10.0.4)
100
+ rdoc (3.12.2)
101
+ json (~> 1.4)
102
+ redis (3.0.4)
103
+ redis-namespace (1.3.0)
104
+ redis (~> 3.0.0)
105
+ resque (1.24.1)
106
+ mono_logger (~> 1.0)
107
+ multi_json (~> 1.0)
108
+ redis-namespace (~> 1.2)
109
+ sinatra (>= 0.9.2)
110
+ vegas (~> 0.1.2)
111
+ rspec (2.14.1)
112
+ rspec-core (~> 2.14.0)
113
+ rspec-expectations (~> 2.14.0)
114
+ rspec-mocks (~> 2.14.0)
115
+ rspec-core (2.14.4)
116
+ rspec-expectations (2.14.0)
117
+ diff-lcs (>= 1.1.3, < 2.0)
118
+ rspec-mocks (2.14.1)
119
+ sidekiq (2.12.1)
120
+ celluloid (>= 0.14.1)
121
+ connection_pool (>= 1.0.0)
122
+ json
123
+ redis (>= 3.0)
124
+ redis-namespace
125
+ sinatra (1.3.6)
126
+ rack (~> 1.4)
127
+ rack-protection (~> 1.3)
128
+ tilt (~> 1.3, >= 1.3.3)
129
+ sprockets (2.2.2)
130
+ hike (~> 1.2)
131
+ multi_json (~> 1.0)
132
+ rack (~> 1.0)
133
+ tilt (~> 1.1, != 1.3.0)
134
+ sqlite3 (1.3.7)
135
+ thor (0.18.1)
136
+ tilt (1.4.1)
137
+ timers (1.1.0)
138
+ treetop (1.4.12)
139
+ polyglot
140
+ polyglot (>= 0.3.1)
141
+ tzinfo (0.3.37)
142
+ vegas (0.1.11)
143
+ rack (>= 1.0.0)
144
+
145
+ PLATFORMS
146
+ ruby
147
+
148
+ DEPENDENCIES
149
+ appraisal
150
+ delayed_job
151
+ delayed_job_active_record
152
+ delayed_paperclip!
153
+ json
154
+ mocha
155
+ rails (~> 3.2.8)
156
+ resque
157
+ rspec
158
+ sidekiq
159
+ sqlite3
@@ -12,6 +12,11 @@ module DelayedPaperclip
12
12
 
13
13
  module InstanceMethods
14
14
 
15
+ def delayed_options
16
+ @instance.class.paperclip_definitions[@name][:delayed]
17
+ end
18
+
19
+ # Attr accessor in Paperclip
15
20
  def post_processing_with_delay
16
21
  !delay_processing?
17
22
  end
@@ -20,15 +25,13 @@ module DelayedPaperclip
20
25
  @post_processing_with_delay = value
21
26
  end
22
27
 
23
- def delayed_options
24
- @instance.class.attachment_definitions[@name][:delayed]
25
- end
26
-
28
+ # if nil, returns whether it has delayed options
29
+ # if set, then it returns
27
30
  def delay_processing?
28
31
  if @post_processing_with_delay.nil?
29
32
  !!delayed_options
30
33
  else
31
- !@post_processing_with_delay
34
+ !@post_processing_with_delay
32
35
  end
33
36
  end
34
37
 
@@ -49,10 +52,9 @@ module DelayedPaperclip
49
52
  processing_image_url
50
53
  end
51
54
 
52
-
55
+ # Updates _processing column to false
53
56
  def after_flush_writes_with_processing(*args)
54
57
  after_flush_writes_without_processing(*args)
55
-
56
58
  # update_column is available in rails 3.1 instead we can do this to update the attribute without callbacks
57
59
 
58
60
  # instance.update_column("#{name}_processing", false) if instance.respond_to?(:"#{name}_processing?")
@@ -9,7 +9,7 @@ module DelayedPaperclip
9
9
  def self.enqueue_delayed_paperclip(instance_klass, instance_id, attachment_name)
10
10
  ::Delayed::Job.enqueue(
11
11
  :payload_object => new(instance_klass, instance_id, attachment_name),
12
- :priority => instance_klass.constantize.attachment_definitions[attachment_name][:delayed][:priority].to_i
12
+ :priority => instance_klass.constantize.paperclip_definitions[attachment_name][:delayed][:priority].to_i
13
13
  )
14
14
  end
15
15
 
@@ -18,7 +18,7 @@ module DelayedPaperclip
18
18
  def self.enqueue_delayed_paperclip(instance_klass, instance_id, attachment_name)
19
19
  ::Delayed::Job.enqueue(
20
20
  new(instance_klass, instance_id, attachment_name),
21
- instance_klass.constantize.attachment_definitions[attachment_name][:delayed][:priority].to_i
21
+ instance_klass.constantize.paperclip_definitions[attachment_name][:delayed][:priority].to_i
22
22
  )
23
23
  end
24
24
 
@@ -1,7 +1,7 @@
1
1
  module DelayedPaperclip
2
2
  module Jobs
3
3
  autoload :DelayedJob, 'delayed_paperclip/jobs/delayed_job'
4
- autoload :Resque, 'delayed_paperclip/jobs/resque'
5
- autoload :Sidekiq, 'delayed_paperclip/jobs/sidekiq'
4
+ autoload :Resque, 'delayed_paperclip/jobs/resque'
5
+ autoload :Sidekiq, 'delayed_paperclip/jobs/sidekiq'
6
6
  end
7
7
  end
@@ -4,6 +4,8 @@ require 'delayed_paperclip'
4
4
  module DelayedPaperclip
5
5
  if defined? Rails::Railtie
6
6
  require 'rails'
7
+
8
+ # On initialzation, include DelayedPaperclip
7
9
  class Railtie < Rails::Railtie
8
10
  initializer 'delayed_paperclip.insert_into_active_record' do
9
11
  ActiveSupport.on_load :active_record do
@@ -14,6 +16,9 @@ module DelayedPaperclip
14
16
  end
15
17
 
16
18
  class Railtie
19
+
20
+ # Glue includes DelayedPaperclip Class Methods and Instance Methods into ActiveRecord
21
+ # Attachment and URL Generator extends Paperclip
17
22
  def self.insert
18
23
  ActiveRecord::Base.send(:include, DelayedPaperclip::Glue)
19
24
  Paperclip::Attachment.send(:include, DelayedPaperclip::Attachment)
@@ -1,8 +1,8 @@
1
1
  require 'uri'
2
+
2
3
  module DelayedPaperclip
3
4
  module UrlGenerator
4
5
  def self.included(base)
5
- base.send :include, InstanceMethods
6
6
  base.alias_method_chain :most_appropriate_url, :processed
7
7
  base.alias_method_chain :timestamp_possible?, :processed
8
8
  end
@@ -28,7 +28,20 @@ module DelayedPaperclip
28
28
  end
29
29
 
30
30
  def delayed_default_url?
31
- !(@attachment.job_is_processing || @attachment.dirty? || !@attachment.delayed_options.try(:[], :url_with_processing) || !(@attachment.instance.respond_to?(:"#{@attachment.name}_processing?") && @attachment.processing?))
31
+ return false if @attachment.job_is_processing
32
+ return false if @attachment.dirty?
33
+ return false if not @attachment.delayed_options.try(:[], :url_with_processing)
34
+ return false if not (@attachment.instance.respond_to?(:"#{@attachment.name}_processing?") && @attachment.processing?)
35
+ true
36
+
37
+ # OLD CRAZY CONDITIONAL
38
+ # TODO: Delete
39
+ # !(
40
+ # @attachment.job_is_processing ||
41
+ # @attachment.dirty? ||
42
+ # !@attachment.delayed_options.try(:[], :url_with_processing) ||
43
+ # !(@attachment.instance.respond_to?(:"#{@attachment.name}_processing?") && @attachment.processing?)
44
+ # )
32
45
  end
33
46
  end
34
47
 
@@ -0,0 +1,3 @@
1
+ module DelayedPaperclip
2
+ VERSION = "2.6.1"
3
+ end
@@ -38,50 +38,51 @@ module DelayedPaperclip
38
38
  end
39
39
 
40
40
  module Glue
41
- def self.included base #:nodoc:
41
+ def self.included(base)
42
42
  base.extend(ClassMethods)
43
+ base.send :include, InstanceMethods
43
44
  end
44
45
  end
45
46
 
46
47
  module ClassMethods
47
48
 
48
49
  def process_in_background(name, options = {})
49
- include InstanceMethods
50
+ # initialize as hash
51
+ paperclip_definitions[name][:delayed] = {}
50
52
 
51
- attachment_definitions[name][:delayed] = {}
53
+ # Set Defaults
52
54
  {
53
55
  :priority => 0,
54
- :only_process => attachment_definitions[name][:only_process],
56
+ :only_process => paperclip_definitions[name][:only_process],
55
57
  :url_with_processing => DelayedPaperclip.options[:url_with_processing],
56
58
  :processing_image_url => options[:processing_image_url]
57
59
  }.each do |option, default|
58
60
 
59
- attachment_definitions[name][:delayed][option] = options.key?(option) ? options[option] : default
61
+ paperclip_definitions[name][:delayed][option] = options.key?(option) ? options[option] : default
60
62
 
61
63
  end
62
64
 
65
+ # Sets callback
63
66
  if respond_to?(:after_commit)
64
67
  after_commit :enqueue_delayed_processing
65
68
  else
66
- after_save :enqueue_delayed_processing
69
+ after_save :enqueue_delayed_processing
67
70
  end
68
71
  end
69
- end
70
-
71
- module InstanceMethods
72
72
 
73
- # setting each inididual NAME_processing to true, skipping the ActiveModel dirty setter
74
- # Then immediately push the state to the database
75
- def mark_enqueue_delayed_processing
76
- unless @_enqued_for_processing_with_processing.blank? # catches nil and empty arrays
77
- updates = @_enqued_for_processing_with_processing.collect{|n| "#{n}_processing = :true" }.join(", ")
78
- updates = ActiveRecord::Base.send(:sanitize_sql_array, [updates, {:true => true}])
79
- self.class.where(:id => self.id).update_all(updates)
73
+ def paperclip_definitions
74
+ @paperclip_definitions ||= if respond_to? :attachment_definitions
75
+ attachment_definitions
76
+ else
77
+ Paperclip::Tasks::Attachments.definitions_for(self)
80
78
  end
81
79
  end
80
+ end
81
+
82
+ module InstanceMethods
82
83
 
83
84
  # First mark processing
84
- # then create
85
+ # then enqueue
85
86
  def enqueue_delayed_processing
86
87
  mark_enqueue_delayed_processing
87
88
 
@@ -92,6 +93,16 @@ module DelayedPaperclip
92
93
  @_enqued_for_processing = []
93
94
  end
94
95
 
96
+ # setting each inididual NAME_processing to true, skipping the ActiveModel dirty setter
97
+ # Then immediately push the state to the database
98
+ def mark_enqueue_delayed_processing
99
+ unless @_enqued_for_processing_with_processing.blank? # catches nil and empty arrays
100
+ updates = @_enqued_for_processing_with_processing.collect{|n| "#{n}_processing = :true" }.join(", ")
101
+ updates = ActiveRecord::Base.send(:sanitize_sql_array, [updates, {:true => true}])
102
+ self.class.where(:id => self.id).update_all(updates)
103
+ end
104
+ end
105
+
95
106
  def enqueue_post_processing_for name
96
107
  DelayedPaperclip.enqueue(self.class.name, read_attribute(:id), name.to_sym)
97
108
  end
@@ -0,0 +1,153 @@
1
+ require 'spec_helper'
2
+
3
+ describe DelayedPaperclip::Attachment do
4
+
5
+ before :all do
6
+ DelayedPaperclip.options[:background_job_class] = DelayedPaperclip::Jobs::Resque
7
+ reset_dummy
8
+ end
9
+
10
+ let(:dummy) { Dummy.create }
11
+
12
+ describe "#delayed_options" do
13
+
14
+ it "returns the specific options for delayed paperclip" do
15
+ dummy.image.delayed_options.should == {
16
+ :priority => 0,
17
+ :only_process => nil,
18
+ :url_with_processing => true,
19
+ :processing_image_url => nil
20
+ }
21
+ end
22
+
23
+ end
24
+
25
+ describe "#post_processing_with_delay" do
26
+ it "is true if delay_processing? is false" do
27
+ dummy.image.stubs(:delay_processing?).returns false
28
+ dummy.image.post_processing_with_delay.should be_true
29
+ end
30
+
31
+ it "is false if delay_processing? is true" do
32
+ dummy.image.stubs(:delay_processing?).returns true
33
+ dummy.image.post_processing_with_delay.should be_false
34
+ end
35
+ end
36
+
37
+ describe "delay_processing?" do
38
+ it "returns delayed_options existence if post_processing_with_delay is nil" do
39
+ dummy.image.post_processing_with_delay = nil
40
+ dummy.image.delay_processing?.should be_true
41
+ end
42
+
43
+ it "returns inverse of post_processing_with_delay if it's set" do
44
+ dummy.image.post_processing_with_delay = true
45
+ dummy.image.delay_processing?.should be_false
46
+ end
47
+ end
48
+
49
+ describe "processing?" do
50
+ it "delegates to the dummy instance" do
51
+ dummy.expects(:image_processing?)
52
+ dummy.image.processing?
53
+ end
54
+ end
55
+
56
+ describe "process_delayed!" do
57
+ it "sets job_is_processing to true" do
58
+ dummy.image.expects(:job_is_processing=).with(true).once
59
+ dummy.image.expects(:job_is_processing=).with(false).once
60
+ dummy.image.process_delayed!
61
+ end
62
+
63
+ it "sets post_processing to true" do
64
+ dummy.image.expects(:post_processing=).with(true).once
65
+ dummy.image.process_delayed!
66
+ end
67
+
68
+ context "without only_process options" do
69
+ it "calls reprocess!" do
70
+ dummy.image.expects(:reprocess!)
71
+ dummy.image.process_delayed!
72
+ end
73
+ end
74
+
75
+ context "with only_process options" do
76
+ before :each do
77
+ reset_dummy(paperclip: { only_process: [:small, :large] } )
78
+ end
79
+
80
+ it "calls reprocess! with options" do
81
+ dummy.image.expects(:reprocess!).with(:small, :large)
82
+ dummy.image.process_delayed!
83
+ end
84
+ end
85
+ end
86
+
87
+ describe "#processing_image_url" do
88
+ context "no url" do
89
+ it "returns nil" do
90
+ dummy.image.processing_image_url.should be_nil
91
+ end
92
+ end
93
+
94
+ context "static url" do
95
+ before :each do
96
+ reset_dummy(:processing_image_url => "/foo/bar.jpg")
97
+ end
98
+
99
+ it "returns given url" do
100
+ dummy.image.processing_image_url.should == "/foo/bar.jpg"
101
+ end
102
+ end
103
+
104
+ context "proc" do
105
+ before :each do
106
+ reset_dummy(:processing_image_url => proc { "Hello/World" } )
107
+ end
108
+
109
+ it "returns evaluates proc" do
110
+ dummy.image.processing_image_url.should == "Hello/World"
111
+ end
112
+ end
113
+ end
114
+
115
+ describe "#after_flush_writes_with_processing" do
116
+ it "updates the column to false" do
117
+ dummy.update_attribute(:image_processing, true)
118
+
119
+ dummy.image.after_flush_writes_with_processing
120
+
121
+ dummy.image_processing.should be_false
122
+ end
123
+ end
124
+
125
+ describe "#save_with_prepare_enqueueing" do
126
+ context "delay processing and it was dirty" do
127
+ before :each do
128
+ dummy.image.stubs(:delay_processing?).returns true
129
+ dummy.image.instance_variable_set(:@dirty, true)
130
+ end
131
+
132
+ it "prepares the enqueing" do
133
+ dummy.expects(:prepare_enqueueing_for).with(:image)
134
+ dummy.image.save_with_prepare_enqueueing
135
+ end
136
+ end
137
+
138
+ context "without dirty or delay_processing" do
139
+ it "does not prepare_enqueueing" do
140
+ dummy.expects(:prepare_enqueueing_for).with(:image).never
141
+ dummy.image.save_with_prepare_enqueueing
142
+ end
143
+ end
144
+ end
145
+
146
+ describe "#reprocess_without_delay!" do
147
+ it "sets post post_processing_with_delay and reprocesses with given args" do
148
+ dummy.image.expects(:reprocess!).with(:small)
149
+ dummy.image.reprocess_without_delay!(:small)
150
+ dummy.image.instance_variable_get(:@post_processing_with_delay).should == true
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,85 @@
1
+ require 'spec_helper'
2
+
3
+ describe DelayedPaperclip::ClassMethods do
4
+
5
+ before :all do
6
+ DelayedPaperclip.options[:background_job_class] = DelayedPaperclip::Jobs::Resque
7
+ reset_dummy(with_processed: false)
8
+ end
9
+
10
+ describe ".process_in_background" do
11
+
12
+ it "is empty to start" do
13
+ Dummy.paperclip_definitions.should == { :image => {} }
14
+ end
15
+
16
+ it "adds basics to paperclip_definitions" do
17
+ Dummy.process_in_background(:image)
18
+ Dummy.paperclip_definitions.should == { :image => {
19
+ :delayed => {
20
+ :priority => 0,
21
+ :only_process => nil,
22
+ :url_with_processing => true,
23
+ :processing_image_url => nil}
24
+ }
25
+ }
26
+ end
27
+
28
+ context "with processing_image_url" do
29
+ before :each do
30
+ Dummy.process_in_background(:image, processing_image_url: "/processing/url")
31
+ end
32
+
33
+ it "incorporates processing url" do
34
+ Dummy.paperclip_definitions.should == { :image => {
35
+ :delayed => {
36
+ :priority => 0,
37
+ :only_process => nil,
38
+ :url_with_processing => true,
39
+ :processing_image_url => "/processing/url"}
40
+ }
41
+ }
42
+ end
43
+ end
44
+
45
+ context "inherits only_process options" do
46
+ before :each do
47
+ reset_class("Dummy", paperclip: { only_process: [:small, :large] } )
48
+ Dummy.process_in_background(:image)
49
+ end
50
+
51
+ it "incorporates processing url" do
52
+ Dummy.paperclip_definitions.should == { :image => {
53
+ :only_process => [:small, :large],
54
+ :delayed => {
55
+ :priority => 0,
56
+ :only_process => [:small, :large],
57
+ :url_with_processing => true,
58
+ :processing_image_url => nil }
59
+ }
60
+ }
61
+ end
62
+ end
63
+
64
+ context "sets callback" do
65
+ context "commit" do
66
+ it "sets after_commit callback" do
67
+ Dummy.expects(:after_commit).with(:enqueue_delayed_processing)
68
+ Dummy.process_in_background(:image)
69
+ end
70
+ end
71
+
72
+ context "save" do
73
+ before :each do
74
+ Dummy.stubs(:respond_to?).with(:after_commit).returns(false)
75
+ end
76
+
77
+ it "sets after_save callback" do
78
+ Dummy.expects(:after_save).with(:enqueue_delayed_processing)
79
+ Dummy.process_in_background(:image)
80
+ end
81
+ end
82
+ end
83
+ end
84
+
85
+ end
@@ -0,0 +1,80 @@
1
+ require 'spec_helper'
2
+
3
+ describe DelayedPaperclip::InstanceMethods do
4
+
5
+ before :all do
6
+ DelayedPaperclip.options[:background_job_class] = DelayedPaperclip::Jobs::Resque
7
+ reset_dummy
8
+ end
9
+
10
+ let(:dummy) { Dummy.create }
11
+
12
+ describe "#enqueue_delayed_processing" do
13
+
14
+ it "marks enqueue_delayed_processing" do
15
+ dummy.expects(:mark_enqueue_delayed_processing)
16
+ dummy.enqueue_delayed_processing
17
+ end
18
+
19
+ it "enqueues post processing for all enqueued" do
20
+ dummy.instance_variable_set(:@_enqued_for_processing, ['image'])
21
+ dummy.expects(:enqueue_post_processing_for).with('image')
22
+ dummy.enqueue_delayed_processing
23
+ end
24
+
25
+ it "clears instance variables" do
26
+ dummy.instance_variable_set(:@_enqued_for_processing, ['foo'])
27
+ dummy.instance_variable_set(:@_enqued_for_processing_with_processing, ['image'])
28
+ dummy.enqueue_delayed_processing
29
+ dummy.instance_variable_get(:@_enqued_for_processing).should == []
30
+ dummy.instance_variable_get(:@_enqued_for_processing_with_processing).should == []
31
+ end
32
+
33
+ end
34
+
35
+ describe "#mark_enqueue_delayed_processing" do
36
+ it "updates columns of _processing" do
37
+ dummy.image_processing.should be_false
38
+ dummy.instance_variable_set(:@_enqued_for_processing_with_processing, ['image'])
39
+ dummy.mark_enqueue_delayed_processing
40
+ dummy.reload.image_processing.should be_true
41
+ end
42
+
43
+ it "does nothing if instance variable not set" do
44
+ dummy.image_processing.should be_false
45
+ dummy.mark_enqueue_delayed_processing
46
+ dummy.reload.image_processing.should be_false
47
+ end
48
+ end
49
+
50
+ describe "#enqueue_post_processing_for" do
51
+ it "enqueues the instance and image" do
52
+ DelayedPaperclip.expects(:enqueue).with("Dummy", dummy.id, :image)
53
+ dummy.enqueue_post_processing_for("image")
54
+ end
55
+ end
56
+
57
+ describe "#prepare_enqueueing_for" do
58
+
59
+ it "updates processing column to true" do
60
+ pending
61
+ # TODO: Why would it be writing the attribute here as well as in mark_enqueue_delayed_processing
62
+ dummy.image_processing.should be_false
63
+ dummy.expects(:write_attribute).with("image_processing", true)
64
+ dummy.prepare_enqueueing_for("image")
65
+ dummy.image_processing.should be_true
66
+ end
67
+
68
+ it "sets instance variables for column updating" do
69
+ dummy.prepare_enqueueing_for("image")
70
+ dummy.instance_variable_get(:@_enqued_for_processing_with_processing).should == ["image"]
71
+ end
72
+
73
+ it "sets instance variables for processing" do
74
+ dummy.prepare_enqueueing_for("image")
75
+ dummy.instance_variable_get(:@_enqued_for_processing).should == ["image"]
76
+ end
77
+ end
78
+
79
+
80
+ end