delayed_paperclip 0.6.1 → 0.6.2
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.
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.6.
|
1
|
+
0.6.2
|
data/delayed_paperclip.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{delayed_paperclip}
|
8
|
-
s.version = "0.6.
|
8
|
+
s.version = "0.6.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Jesse Storimer"]
|
12
|
-
s.date = %q{2010-03-
|
12
|
+
s.date = %q{2010-03-08}
|
13
13
|
s.description = %q{Process your Paperclip attachments in the background with delayed_job.}
|
14
14
|
s.email = %q{jesse@jstorimer.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -2,7 +2,14 @@ class DelayedPaperclipJob < Struct.new(:instance_klass, :instance_id, :attachmen
|
|
2
2
|
def perform
|
3
3
|
instance = instance_klass.constantize.find(instance_id)
|
4
4
|
|
5
|
-
instance.send(attachment_name).reprocess!
|
6
5
|
instance.send("#{attachment_name}_processed!")
|
6
|
+
begin
|
7
|
+
instance.send(attachment_name).reprocess!
|
8
|
+
rescue Exception => e
|
9
|
+
instance.send("#{attachment_name}_processing!", :save => true)
|
10
|
+
|
11
|
+
# DJ will now pickup this error and do its error handling
|
12
|
+
raise(e)
|
13
|
+
end
|
7
14
|
end
|
8
15
|
end
|
@@ -4,7 +4,14 @@ class ResquePaperclipJob
|
|
4
4
|
def self.perform(instance_klass, instance_id, attachment_name)
|
5
5
|
instance = instance_klass.constantize.find(instance_id)
|
6
6
|
|
7
|
-
instance.send(attachment_name).reprocess!
|
8
7
|
instance.send("#{attachment_name}_processed!")
|
8
|
+
begin
|
9
|
+
instance.send(attachment_name).reprocess!
|
10
|
+
rescue Object => e
|
11
|
+
instance.send("#{attachment_name}_processing!", :save => true)
|
12
|
+
|
13
|
+
# Hand the error off to Resque
|
14
|
+
raise(e)
|
15
|
+
end
|
9
16
|
end
|
10
17
|
end
|
data/lib/delayed/paperclip.rb
CHANGED
@@ -9,7 +9,7 @@ module Delayed
|
|
9
9
|
include InstanceMethods
|
10
10
|
|
11
11
|
define_method "#{name}_changed?" do
|
12
|
-
|
12
|
+
attachment_has_changed?(name)
|
13
13
|
end
|
14
14
|
|
15
15
|
define_method "halt_processing_for_#{name}" do
|
@@ -36,12 +36,17 @@ module Delayed
|
|
36
36
|
self.save(false)
|
37
37
|
end
|
38
38
|
|
39
|
-
define_method "#{name}_processing!" do
|
39
|
+
define_method "#{name}_processing!" do |*args|
|
40
|
+
force_save = args.first
|
40
41
|
return unless column_exists?(:"#{name}_processing")
|
41
|
-
|
42
|
-
|
42
|
+
|
43
|
+
unless force_save
|
44
|
+
return if self.send(:"#{name}_processing?")
|
45
|
+
return unless self.send(:"#{name}_changed?")
|
46
|
+
end
|
43
47
|
|
44
48
|
self.send("#{name}_processing=", true)
|
49
|
+
self.save(false) if force_save
|
45
50
|
end
|
46
51
|
|
47
52
|
self.send("before_#{name}_post_process", :"halt_processing_for_#{name}")
|
@@ -53,8 +58,8 @@ module Delayed
|
|
53
58
|
|
54
59
|
module InstanceMethods
|
55
60
|
PAPERCLIP_ATTRIBUTES = ['_file_size', '_file_name', '_content_type', '_updated_at']
|
56
|
-
|
57
|
-
def
|
61
|
+
|
62
|
+
def attachment_has_changed?(name)
|
58
63
|
PAPERCLIP_ATTRIBUTES.each do |attribute|
|
59
64
|
full_attribute = "#{name}#{attribute}_changed?".to_sym
|
60
65
|
|
@@ -89,7 +94,11 @@ module Paperclip
|
|
89
94
|
if !@instance.send(:"#{@name}_processing?")
|
90
95
|
url_without_processed style, include_updated_timestamp
|
91
96
|
else
|
92
|
-
|
97
|
+
if @instance.send(:"#{@name}_changed?")
|
98
|
+
url_without_processed style, include_updated_timestamp
|
99
|
+
else
|
100
|
+
interpolate(@default_url, style)
|
101
|
+
end
|
93
102
|
end
|
94
103
|
end
|
95
104
|
end
|
@@ -59,6 +59,18 @@ class DelayedPaperclipTest < Test::Unit::TestCase
|
|
59
59
|
@dummy.save!
|
60
60
|
Delayed::Job.last.payload_object.perform
|
61
61
|
end
|
62
|
+
|
63
|
+
def test_processing_column_kept_intact
|
64
|
+
@dummy = reset_dummy(true)
|
65
|
+
|
66
|
+
@dummy.stubs(:image_changed?).returns(true)
|
67
|
+
Paperclip::Attachment.any_instance.stubs(:reprocess!).raises(StandardError.new('oops'))
|
68
|
+
|
69
|
+
@dummy.save!
|
70
|
+
assert @dummy.image_processing?
|
71
|
+
Delayed::Job.work_off
|
72
|
+
assert @dummy.reload.image_processing?
|
73
|
+
end
|
62
74
|
|
63
75
|
def test_after_callback_is_functional
|
64
76
|
@dummy_class.send(:define_method, :done_processing) { puts 'done' }
|
@@ -109,10 +121,36 @@ class DelayedPaperclipTest < Test::Unit::TestCase
|
|
109
121
|
@dummy.save!
|
110
122
|
|
111
123
|
assert_match(/\/system\/images\/1\/original\/12k.png/, @dummy.image.url)
|
112
|
-
|
113
|
-
# Delayed::Job.first.invoke_job
|
114
|
-
#
|
115
|
-
# @dummy.reload
|
116
|
-
# assert_match(/\/system\/images\/1\/original\/12k.png/, @dummy.image.url)
|
117
124
|
end
|
125
|
+
|
126
|
+
def test_original_url_if_image_changed
|
127
|
+
@dummy = reset_dummy(true)
|
128
|
+
@dummy.image_processing!
|
129
|
+
@dummy.image_content_type_will_change!
|
130
|
+
|
131
|
+
assert_match(/system\/images\/.*original.*/, @dummy.image.url)
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_missing_url_if_image_hasnt_changed
|
135
|
+
@dummy = reset_dummy(true)
|
136
|
+
@dummy.image_processing!
|
137
|
+
@dummy.stubs(:image_changed?).returns(false)
|
138
|
+
|
139
|
+
assert_match(/images\/.*missing.*/, @dummy.image.url)
|
140
|
+
end
|
141
|
+
|
142
|
+
def test_attachment_processing_with_no_args
|
143
|
+
Dummy.any_instance.expects(:save).never
|
144
|
+
|
145
|
+
@dummy.image_processing!
|
146
|
+
end
|
147
|
+
|
148
|
+
def test_attachment_processing_with_args
|
149
|
+
Dummy.any_instance.stubs(:image_processing?).returns(true)
|
150
|
+
@dummy = reset_dummy(true)
|
151
|
+
@dummy.image_content_type_will_change!
|
152
|
+
@dummy.expects(:save).with(false)
|
153
|
+
|
154
|
+
@dummy.image_processing!(:save => true)
|
155
|
+
end
|
118
156
|
end
|
@@ -7,6 +7,7 @@ class ResquePaperclipTest < Test::Unit::TestCase
|
|
7
7
|
# Make sure that we just test Resque in here
|
8
8
|
Object.send(:remove_const, :Delayed) if defined? Delayed
|
9
9
|
|
10
|
+
Resque.remove_queue(:paperclip)
|
10
11
|
reset_dummy
|
11
12
|
end
|
12
13
|
|
@@ -34,4 +35,19 @@ class ResquePaperclipTest < Test::Unit::TestCase
|
|
34
35
|
@dummy.save!
|
35
36
|
ResquePaperclipJob.perform(@dummy.class.name, @dummy.id, :image)
|
36
37
|
end
|
38
|
+
|
39
|
+
def test_processing_column_kept_intact
|
40
|
+
@dummy = reset_dummy(true)
|
41
|
+
|
42
|
+
@dummy.stubs(:image_changed?).returns(true)
|
43
|
+
Paperclip::Attachment.any_instance.stubs(:reprocess!).raises(StandardError.new('oops'))
|
44
|
+
|
45
|
+
@dummy.save!
|
46
|
+
assert @dummy.image_processing?
|
47
|
+
|
48
|
+
worker = Resque::Worker.new(:paperclip)
|
49
|
+
worker.process
|
50
|
+
|
51
|
+
assert @dummy.reload.image_processing?
|
52
|
+
end
|
37
53
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 6
|
8
|
-
-
|
9
|
-
version: 0.6.
|
8
|
+
- 2
|
9
|
+
version: 0.6.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Jesse Storimer
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-03-
|
17
|
+
date: 2010-03-08 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|