delayed_paperclip 2.5.0.1 → 2.5.1.0
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/README.textile +26 -2
- data/lib/delayed_paperclip.rb +5 -2
- data/lib/delayed_paperclip/jobs.rb +1 -0
- data/lib/delayed_paperclip/jobs/sidekiq.rb +18 -0
- data/lib/delayed_paperclip/url_generator.rb +15 -2
- data/test/base_delayed_paperclip_test.rb +19 -10
- data/test/sidekiq_paperclip.rb +39 -0
- data/test/test_helper.rb +1 -0
- metadata +28 -10
data/README.textile
CHANGED
@@ -60,12 +60,12 @@ To have the missing image url be outputted by paperclip while the image is being
|
|
60
60
|
def self.up
|
61
61
|
add_column :users, :avatar_processing, :boolean
|
62
62
|
end
|
63
|
-
|
63
|
+
|
64
64
|
def self.down
|
65
65
|
remove_column :users, :avatar_processing
|
66
66
|
end
|
67
67
|
end
|
68
|
-
|
68
|
+
|
69
69
|
@user = User.new(:avatar => File.new(...))
|
70
70
|
@user.save
|
71
71
|
@user.avatar.url #=> "/images/original/missing.png"
|
@@ -75,6 +75,30 @@ To have the missing image url be outputted by paperclip while the image is being
|
|
75
75
|
@user.avatar.url #=> "/system/images/3/original/IMG_2772.JPG?1267562148"
|
76
76
|
</code></pre>
|
77
77
|
|
78
|
+
h4. Custom image for processing
|
79
|
+
|
80
|
+
This is useful if you have a difference between missing images and images currently
|
81
|
+
being processed.
|
82
|
+
|
83
|
+
<pre><code>
|
84
|
+
|
85
|
+
class User < ActiveRecord::Base
|
86
|
+
has_attached_file :avatar
|
87
|
+
|
88
|
+
process_in_background :avatar, :processing_image_url => "/images/original/processing.jpg"
|
89
|
+
end
|
90
|
+
|
91
|
+
@user = User.new(:avatar => File.new(...))
|
92
|
+
@user.save
|
93
|
+
@user.avatar.url #=> "/images/original/processing.png"
|
94
|
+
Delayed::Worker.new.work_off
|
95
|
+
|
96
|
+
@user.reload
|
97
|
+
@user.avatar.url #=> "/system/images/3/original/IMG_2772.JPG?1267562148"
|
98
|
+
|
99
|
+
</code></pre>
|
100
|
+
|
101
|
+
|
78
102
|
h2. What if I'm not using images?
|
79
103
|
|
80
104
|
This library works no matter what kind of post-processing you are doing with Paperclip.
|
data/lib/delayed_paperclip.rb
CHANGED
@@ -10,13 +10,15 @@ module DelayedPaperclip
|
|
10
10
|
def options
|
11
11
|
@options ||= {
|
12
12
|
:background_job_class => detect_background_task,
|
13
|
-
:url_with_processing => true
|
13
|
+
:url_with_processing => true,
|
14
|
+
:processing_image_url => nil
|
14
15
|
}
|
15
16
|
end
|
16
17
|
|
17
18
|
def detect_background_task
|
18
19
|
return DelayedPaperclip::Jobs::DelayedJob if defined? ::Delayed::Job
|
19
20
|
return DelayedPaperclip::Jobs::Resque if defined? ::Resque
|
21
|
+
return DelayedPaperclip::Jobs::Sidekiq if defined? ::Sidekiq
|
20
22
|
end
|
21
23
|
|
22
24
|
def processor
|
@@ -49,7 +51,8 @@ module DelayedPaperclip
|
|
49
51
|
attachment_definitions[name][:delayed] = {}
|
50
52
|
{
|
51
53
|
:priority => 0,
|
52
|
-
:url_with_processing => DelayedPaperclip.options[:url_with_processing]
|
54
|
+
:url_with_processing => DelayedPaperclip.options[:url_with_processing],
|
55
|
+
:processing_image_url => options[:processing_image_url]
|
53
56
|
}.each do |option, default|
|
54
57
|
attachment_definitions[name][:delayed][option] = options.key?(option) ? options[option] : default
|
55
58
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'sidekiq/worker'
|
2
|
+
|
3
|
+
module DelayedPaperclip
|
4
|
+
module Jobs
|
5
|
+
class Sidekiq
|
6
|
+
include ::Sidekiq::Worker
|
7
|
+
sidekiq_options :queue => :paperclip
|
8
|
+
|
9
|
+
def self.enqueue_delayed_paperclip(instance_klass, instance_id, attachment_name)
|
10
|
+
perform_async(instance_klass, instance_id, attachment_name)
|
11
|
+
end
|
12
|
+
|
13
|
+
def perform(instance_klass, instance_id, attachment_name)
|
14
|
+
DelayedPaperclip.process_job(instance_klass, instance_id, attachment_name)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -4,13 +4,26 @@ module DelayedPaperclip
|
|
4
4
|
def self.included(base)
|
5
5
|
base.send :include, InstanceMethods
|
6
6
|
base.alias_method_chain :most_appropriate_url, :processed
|
7
|
+
base.alias_method_chain :timestamp_possible?, :processed
|
7
8
|
end
|
8
9
|
|
9
10
|
def most_appropriate_url_with_processed
|
10
11
|
if @attachment.original_filename.nil? || delayed_default_url?
|
11
|
-
|
12
|
+
if @attachment.delayed_options.nil? || @attachment.delayed_options[:processing_image_url].nil?
|
13
|
+
default_url
|
14
|
+
else
|
15
|
+
@attachment.delayed_options[:processing_image_url]
|
16
|
+
end
|
12
17
|
else
|
13
|
-
|
18
|
+
@attachment_options[:url]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def timestamp_possible_with_processed?
|
23
|
+
if delayed_default_url?
|
24
|
+
false
|
25
|
+
else
|
26
|
+
timestamp_possible_without_processed?
|
14
27
|
end
|
15
28
|
end
|
16
29
|
|
@@ -73,11 +73,20 @@ module BaseDelayedPaperclipTest
|
|
73
73
|
def test_unprocessed_image_returns_missing_url
|
74
74
|
dummy = Dummy.new(:image => File.open("#{RAILS_ROOT}/test/fixtures/12k.png"))
|
75
75
|
dummy.save!
|
76
|
-
|
77
|
-
dummy.image.url.starts_with?("/images/original/missing.png")
|
76
|
+
assert dummy.image.url.starts_with?("/images/original/missing.png")
|
78
77
|
process_jobs
|
79
78
|
dummy.reload
|
80
|
-
dummy.image.url.starts_with?("/system/images/
|
79
|
+
assert dummy.image.url.starts_with?("/system/dummies/images/000/000/001/original/12k.png")
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_unprocess_image_returns_reprocessing_url
|
83
|
+
reset_dummy :processing_image_url => "/images/original/processing.png"
|
84
|
+
dummy = Dummy.new(:image => File.open("#{RAILS_ROOT}/test/fixtures/12k.png"))
|
85
|
+
dummy.save!
|
86
|
+
assert dummy.image.url.starts_with?("/images/original/processing.png")
|
87
|
+
process_jobs
|
88
|
+
dummy.reload
|
89
|
+
assert dummy.image.url.starts_with?("/system/dummies/images/000/000/001/original/12k.png")
|
81
90
|
end
|
82
91
|
|
83
92
|
def test_unprocessed_image_not_returning_missing_url_if_turned_of_globally
|
@@ -85,27 +94,27 @@ module BaseDelayedPaperclipTest
|
|
85
94
|
reset_dummy :with_processed => false
|
86
95
|
dummy = Dummy.new(:image => File.open("#{RAILS_ROOT}/test/fixtures/12k.png"))
|
87
96
|
dummy.save!
|
88
|
-
dummy.image.url.starts_with?("/system/images/
|
97
|
+
assert dummy.image.url.starts_with?("/system/dummies/images/000/000/001/original/12k.png")
|
89
98
|
process_jobs
|
90
99
|
dummy.reload
|
91
|
-
dummy.image.url.starts_with?("/system/images/
|
100
|
+
assert dummy.image.url.starts_with?("/system/dummies/images/000/000/001/original/12k.png")
|
92
101
|
end
|
93
102
|
|
94
103
|
def test_unprocessed_image_not_returning_missing_url_if_turned_of_on_instance
|
95
104
|
reset_dummy :with_processed => false, :url_with_processing => false
|
96
105
|
dummy = Dummy.new(:image => File.open("#{RAILS_ROOT}/test/fixtures/12k.png"))
|
97
106
|
dummy.save!
|
98
|
-
dummy.image.url.starts_with?("/system/images/
|
107
|
+
assert dummy.image.url.starts_with?("/system/dummies/images/000/000/001/original/12k.png")
|
99
108
|
process_jobs
|
100
109
|
dummy.reload
|
101
|
-
dummy.image.url.starts_with?("/system/images/
|
110
|
+
assert dummy.image.url.starts_with?("/system/dummies/images/000/000/001/original/12k.png")
|
102
111
|
end
|
103
112
|
|
104
113
|
def test_original_url_when_no_processing_column
|
105
114
|
reset_dummy :with_processed => false
|
106
115
|
dummy = Dummy.new(:image => File.open("#{RAILS_ROOT}/test/fixtures/12k.png"))
|
107
116
|
dummy.save!
|
108
|
-
dummy.image.url.starts_with?("/system/images/
|
117
|
+
assert dummy.reload.image.url.starts_with?("/system/dummies/images/000/000/001/original/12k.png")
|
109
118
|
end
|
110
119
|
|
111
120
|
def test_original_url_if_image_changed
|
@@ -113,9 +122,9 @@ module BaseDelayedPaperclipTest
|
|
113
122
|
dummy.save!
|
114
123
|
dummy.image = File.open("#{RAILS_ROOT}/test/fixtures/12k.png")
|
115
124
|
dummy.save!
|
116
|
-
dummy.image.url.starts_with?("/images/original/missing.png")
|
125
|
+
assert dummy.image.url.starts_with?("/images/original/missing.png")
|
117
126
|
process_jobs
|
118
|
-
dummy.image.url.starts_with?("/system/images/
|
127
|
+
assert dummy.reload.image.url.starts_with?("/system/dummies/images/000/000/001/original/12k.png")
|
119
128
|
end
|
120
129
|
|
121
130
|
def test_missing_url_if_image_hasnt_changed
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'base_delayed_paperclip_test'
|
3
|
+
require 'sidekiq'
|
4
|
+
|
5
|
+
class SidekiqPaperclipTest < Test::Unit::TestCase
|
6
|
+
include BaseDelayedPaperclipTest
|
7
|
+
|
8
|
+
def setup
|
9
|
+
super
|
10
|
+
# Make sure that we just test Sidekiq in here
|
11
|
+
DelayedPaperclip.options[:background_job_class] = DelayedPaperclip::Jobs::Sidekiq
|
12
|
+
Sidekiq::Queue.new(:paperclip).clear
|
13
|
+
end
|
14
|
+
|
15
|
+
def process_jobs
|
16
|
+
Sidekiq::Queue.new(:paperclip).each do |job|
|
17
|
+
worker = job.klass.constantize.new
|
18
|
+
args = job.args
|
19
|
+
begin
|
20
|
+
worker.perform(*args)
|
21
|
+
rescue # Assume sidekiq handle exception properly
|
22
|
+
end
|
23
|
+
job.delete
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def jobs_count
|
28
|
+
Sidekiq::Queue.new(:paperclip).size
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_perform_job
|
32
|
+
dummy = Dummy.new(:image => File.open("#{RAILS_ROOT}/test/fixtures/12k.png"))
|
33
|
+
dummy.image = File.open("#{RAILS_ROOT}/test/fixtures/12k.png")
|
34
|
+
Paperclip::Attachment.any_instance.expects(:reprocess!)
|
35
|
+
dummy.save!
|
36
|
+
DelayedPaperclip::Jobs::Sidekiq.new.perform(dummy.class.name, dummy.id, :image)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: delayed_paperclip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.5.0
|
4
|
+
version: 2.5.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2013-02-12 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: paperclip
|
@@ -93,6 +93,22 @@ dependencies:
|
|
93
93
|
- - ! '>='
|
94
94
|
- !ruby/object:Gem::Version
|
95
95
|
version: '0'
|
96
|
+
- !ruby/object:Gem::Dependency
|
97
|
+
name: sidekiq
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
100
|
+
requirements:
|
101
|
+
- - ! '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
108
|
+
requirements:
|
109
|
+
- - ! '>='
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
96
112
|
description: Process your Paperclip attachments in the background with delayed_job,
|
97
113
|
Resque or your own processor.
|
98
114
|
email: james@jamesrgifford.com
|
@@ -104,19 +120,21 @@ files:
|
|
104
120
|
- LICENSE
|
105
121
|
- Rakefile
|
106
122
|
- init.rb
|
107
|
-
- lib/delayed_paperclip.rb
|
108
123
|
- lib/delayed_paperclip/railtie.rb
|
109
|
-
- lib/delayed_paperclip/attachment.rb
|
110
|
-
- lib/delayed_paperclip/url_generator.rb
|
111
|
-
- lib/delayed_paperclip/jobs/resque.rb
|
112
124
|
- lib/delayed_paperclip/jobs/delayed_job.rb
|
125
|
+
- lib/delayed_paperclip/jobs/resque.rb
|
126
|
+
- lib/delayed_paperclip/jobs/sidekiq.rb
|
127
|
+
- lib/delayed_paperclip/attachment.rb
|
113
128
|
- lib/delayed_paperclip/jobs.rb
|
129
|
+
- lib/delayed_paperclip/url_generator.rb
|
130
|
+
- lib/delayed_paperclip.rb
|
131
|
+
- test/database.yml
|
132
|
+
- test/sidekiq_paperclip.rb
|
133
|
+
- test/delayed_paperclip_test.rb
|
134
|
+
- test/resque_paperclip_test.rb
|
114
135
|
- test/base_delayed_paperclip_test.rb
|
115
136
|
- test/test_helper.rb
|
116
137
|
- test/fixtures/12k.png
|
117
|
-
- test/delayed_paperclip_test.rb
|
118
|
-
- test/database.yml
|
119
|
-
- test/resque_paperclip_test.rb
|
120
138
|
- rails/init.rb
|
121
139
|
homepage: http://github.com/jrgifford/delayed_paperclip
|
122
140
|
licenses: []
|
@@ -138,7 +156,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
138
156
|
version: '0'
|
139
157
|
requirements: []
|
140
158
|
rubyforge_project:
|
141
|
-
rubygems_version: 1.8.
|
159
|
+
rubygems_version: 1.8.25
|
142
160
|
signing_key:
|
143
161
|
specification_version: 3
|
144
162
|
summary: Process your Paperclip attachments in the background.
|