carrierwave_backgrounder 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## 0.2.1
2
+
3
+ ### enhancements
4
+ * [#119] Add support for SuckerPunch [rewritten].
5
+
6
+ ### bug fixes
7
+ * [#115] column_remove! should not trigger a background job
8
+ * [#112] Raise a NoMethodError when using backend= instead of silent failure.
9
+
1
10
  ## 0.2.0
2
11
 
3
12
  ### enhancements
data/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  I like CarrierWave. That being said, I don't like tying up app instances waiting for images to process.
8
8
 
9
9
  This gem addresses that by offloading processing or storage/processing to a background task.
10
- We currently support Delayed Job, Resque, Sidekiq, Girl Friday, Qu, and Queue Classic.
10
+ We currently support Delayed Job, Resque, Sidekiq, SuckerPunch, Girl Friday, Qu, and Queue Classic.
11
11
 
12
12
  ## Background options
13
13
 
@@ -55,6 +55,19 @@ CarrierWave::Backgrounder.configure do |c|
55
55
  end
56
56
  ```
57
57
 
58
+ For SuckerPunch, you have to configure your queue with a specific worker.
59
+
60
+ ```ruby
61
+ SuckerPunch.config do
62
+ queue name: :carrierwave, worker: CarrierWave::Workers::StoreAsset, size: 2
63
+ end
64
+
65
+ CarrierWave::Backgrounder.configure do |c|
66
+ c.backend :sucker_punch, queue: :carrierwave
67
+ end
68
+ ```
69
+
70
+
58
71
  In your CarrierWave uploader file:
59
72
 
60
73
  ```ruby
@@ -100,7 +100,7 @@ module CarrierWave
100
100
  def #{column}_updated?; true; end
101
101
 
102
102
  def enqueue_#{column}_background_job?
103
- !process_#{column}_upload && #{column}_updated?
103
+ !remove_#{column}? && !process_#{column}_upload && #{column}_updated?
104
104
  end
105
105
 
106
106
  def enqueue_#{column}_background_job
@@ -0,0 +1,25 @@
1
+ module CarrierWave
2
+ module Backgrounder
3
+ class Railtie < Rails::Railtie
4
+
5
+ initializer "carrierwave_backgrounder.active_record" do
6
+ ActiveSupport.on_load :active_record do
7
+ require 'backgrounder/orm/activemodel'
8
+ ::ActiveRecord::Base.extend CarrierWave::Backgrounder::ORM::ActiveModel
9
+ end
10
+ end
11
+
12
+ initializer "carrierwave_backgrounder.data_mapper", :before =>"data_mapper.add_to_prepare" do
13
+ require 'backgrounder/orm/data_mapper' if defined?(DataMapper)
14
+ end
15
+
16
+ initializer "carrierwave_backgrounder.mongoid" do
17
+ if defined?(Mongoid)
18
+ require 'backgrounder/orm/activemodel'
19
+ ::Mongoid::Document::ClassMethods.send(:include, ::CarrierWave::Backgrounder::ORM::ActiveModel)
20
+ end
21
+ end
22
+
23
+ end
24
+ end
25
+ end
@@ -6,7 +6,6 @@ module Support
6
6
  end
7
7
 
8
8
  module ClassMethods
9
- attr_writer :backend
10
9
  attr_reader :queue_options
11
10
 
12
11
  def backend(queue_name=nil, args={})
@@ -31,12 +30,8 @@ module Support
31
30
  end
32
31
 
33
32
  def enqueue_sidekiq(worker, *args)
34
- sidekiq_client_args = { 'class' => worker, 'args' => args }
35
- sidekiq_client_args['queue'] = queue_options[:queue] unless queue_options[:queue].nil?
36
- sidekiq_client_args['retry'] = queue_options[:retry] unless queue_options[:retry].nil?
37
- sidekiq_client_args['timeout'] = queue_options[:timeout] unless queue_options[:timeout].nil?
38
- sidekiq_client_args['backtrace'] = queue_options[:backtrace] unless queue_options[:backtrace].nil?
39
- worker.client_push(sidekiq_client_args)
33
+ args = sidekiq_queue_options('class' => worker, 'args' => args)
34
+ worker.client_push(args)
40
35
  end
41
36
 
42
37
  def enqueue_girl_friday(worker, *args)
@@ -47,6 +42,11 @@ module Support
47
42
  @girl_friday_queue << { :worker => worker.new(*args) }
48
43
  end
49
44
 
45
+ def enqueue_sucker_punch(worker, *args)
46
+ @sucker_punch_queue ||= SuckerPunch::Queue[queue_options[:queue] || :carrierwave]
47
+ @sucker_punch_queue.async.perform(*args)
48
+ end
49
+
50
50
  def enqueue_qu(worker, *args)
51
51
  worker.instance_variable_set('@queue', queue_options[:queue] || :carrierwave)
52
52
  ::Qu.enqueue worker, *args
@@ -60,6 +60,14 @@ module Support
60
60
  def enqueue_immediate(worker, *args)
61
61
  worker.new(*args).perform
62
62
  end
63
+
64
+ def sidekiq_queue_options(args)
65
+ args['queue'] = queue_options[:queue] if queue_options[:queue]
66
+ args['retry'] = queue_options[:retry] unless queue_options[:retry].nil?
67
+ args['timeout'] = queue_options[:timeout] if queue_options[:timeout]
68
+ args['backtrace'] = queue_options[:backtrace] if queue_options[:backtrace]
69
+ args
70
+ end
63
71
  end
64
72
  end
65
73
  end
@@ -1,5 +1,5 @@
1
1
  module CarrierWave
2
2
  module Backgrounder
3
- VERSION = "0.2.0"
3
+ VERSION = "0.2.1"
4
4
  end
5
5
  end
@@ -12,7 +12,8 @@ module CarrierWave
12
12
 
13
13
  def self.configure
14
14
  yield self
15
- if @backend == :sidekiq
15
+ case @backend
16
+ when :sidekiq
16
17
  ::CarrierWave::Workers::ProcessAsset.class_eval do
17
18
  require 'sidekiq'
18
19
  include ::Sidekiq::Worker
@@ -21,36 +22,19 @@ module CarrierWave
21
22
  require 'sidekiq'
22
23
  include ::Sidekiq::Worker
23
24
  end
24
- end
25
- end
26
-
27
- end
28
- end
29
-
30
- if defined?(Rails)
31
- module CarrierWave
32
- module Backgrounder
33
- class Railtie < Rails::Railtie
34
-
35
- initializer "carrierwave_backgrounder.active_record" do
36
- ActiveSupport.on_load :active_record do
37
- require 'backgrounder/orm/activemodel'
38
- ::ActiveRecord::Base.extend CarrierWave::Backgrounder::ORM::ActiveModel
39
- end
40
- end
41
-
42
- initializer "carrierwave_backgrounder.data_mapper", :before =>"data_mapper.add_to_prepare" do
43
- require 'backgrounder/orm/data_mapper' if defined?(DataMapper)
25
+ when :sucker_punch
26
+ ::CarrierWave::Workers::ProcessAsset.class_eval do
27
+ require 'sucker_punch'
28
+ include ::SuckerPunch::Worker
44
29
  end
45
-
46
- initializer "carrierwave_backgrounder.mongoid" do
47
- if defined?(Mongoid)
48
- require 'backgrounder/orm/activemodel'
49
- ::Mongoid::Document::ClassMethods.send(:include, ::CarrierWave::Backgrounder::ORM::ActiveModel)
50
- end
30
+ ::CarrierWave::Workers::StoreAsset.class_eval do
31
+ require 'sucker_punch'
32
+ include ::SuckerPunch::Worker
51
33
  end
52
-
53
34
  end
54
35
  end
36
+
55
37
  end
56
38
  end
39
+
40
+ require 'backgrounder/railtie' if defined?(Rails)
@@ -9,6 +9,7 @@ describe CarrierWave::Backgrounder::ORM::ActiveModel do
9
9
  def self.after_commit(method, opts); nil; end
10
10
  def avatar_changed?; nil; end
11
11
  def remote_avatar_url; OpenStruct.new(:present? => true); end
12
+ def remove_avatar?; false; end
12
13
  def previous_changes; {}; end
13
14
  end
14
15
 
@@ -11,8 +11,9 @@ describe Support::Backends do
11
11
 
12
12
  describe 'setting backend' do
13
13
  it 'using #backend=' do
14
- mock_module.backend = :delayed_job
15
- expect(mock_module.backend).to eql(:delayed_job)
14
+ expect {
15
+ mock_module.backend = :delayed_job
16
+ }.to raise_error(NoMethodError)
16
17
  end
17
18
 
18
19
  it 'using #backend' do
@@ -123,6 +124,28 @@ describe Support::Backends do
123
124
  end
124
125
  end
125
126
 
127
+ context 'sucker_punch' do
128
+ let(:args) { [MockWorker, 'FakeClass', 1, :image] }
129
+ let(:mock_sp) { mock('SuckerPunch')}
130
+
131
+ before do
132
+ mock_sp.expects(:async).returns(mock_sp)
133
+ mock_sp.expects(:perform).with('FakeClass', 1, :image)
134
+ end
135
+
136
+ it 'sets the queue to :carrierwave by default' do
137
+ SuckerPunch::Queue.expects(:[]).with(:carrierwave).returns(mock_sp)
138
+ mock_module.backend :sucker_punch
139
+ mock_module.enqueue_for_backend(*args)
140
+ end
141
+
142
+ it 'sets the queue to backend :queue option' do
143
+ SuckerPunch::Queue.expects(:[]).with(:awesome_queue).returns(mock_sp)
144
+ mock_module.backend :sucker_punch, :queue => :awesome_queue
145
+ mock_module.enqueue_for_backend(*args)
146
+ end
147
+ end
148
+
126
149
  context 'qu' do
127
150
  let(:args) { [MockWorker, 'FakeClass', 1, :image] }
128
151
  before do
@@ -37,3 +37,8 @@ end
37
37
 
38
38
  module QC
39
39
  end
40
+
41
+ module SuckerPunch
42
+ class Queue
43
+ end
44
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: carrierwave_backgrounder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-04 00:00:00.000000000 Z
12
+ date: 2013-03-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: carrierwave
@@ -94,6 +94,7 @@ files:
94
94
  - lib/backgrounder/orm/activemodel.rb
95
95
  - lib/backgrounder/orm/base.rb
96
96
  - lib/backgrounder/orm/data_mapper.rb
97
+ - lib/backgrounder/railtie.rb
97
98
  - lib/backgrounder/support/backends.rb
98
99
  - lib/backgrounder/version.rb
99
100
  - lib/backgrounder/workers.rb
@@ -127,7 +128,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
127
128
  version: '0'
128
129
  segments:
129
130
  - 0
130
- hash: 517086272646554403
131
+ hash: 1936252162021597709
131
132
  required_rubygems_version: !ruby/object:Gem::Requirement
132
133
  none: false
133
134
  requirements:
@@ -136,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
137
  version: '0'
137
138
  segments:
138
139
  - 0
139
- hash: 517086272646554403
140
+ hash: 1936252162021597709
140
141
  requirements: []
141
142
  rubyforge_project:
142
143
  rubygems_version: 1.8.24