carrierwave_backgrounder 0.4.1 → 0.4.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: abc9a18253e5769acf85ec7fe57cd8778d331f09
4
- data.tar.gz: 8317e2803900b1c724064ec3c759558946927aca
2
+ SHA256:
3
+ metadata.gz: c08d7bdb01034545507f0ef13305aa12764e2771148c4ddc22f1291fbba8f7f9
4
+ data.tar.gz: 21d4f4a1cd200c5b05f9b967d4fda436e7d11752ba6fb6307f619a7b32ae1924
5
5
  SHA512:
6
- metadata.gz: 469bc208573057e5934e8f42e21f0d95ff955b3b377b709b6aa504a4931ac80b29f42f83bd26986fa601b777b3ed9fa4b4af14b59981ca59cc14a7dc314ba4d0
7
- data.tar.gz: b4fcd8692e900393d94a9ee779a605d0c733785b425312b14c5c825464e21ed07aafc3c458b398dc42bafac88562716adbb2ddf31cfb4d252e915b00a28d039e
6
+ metadata.gz: 683938ec5318b2727ae40e177a717fc6135f479f397cbdd39e0b3639a70ff3508ef98406ced8fd203b6d34d4017a84d2a2eab64f164d69bd8d24c64e2ff1786c
7
+ data.tar.gz: 44b9e651e679fa450dfbe9620e58e5472c0be9bc20bd7f4ce29894de28c30c7f6d5c04f7dd9aa56fc4277bd8d0a3ff0205aa287fb31439e8bfaa5d6158ccbe0b
data/.gitignore CHANGED
@@ -2,3 +2,4 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
+ vendor/*
data/.travis.yml CHANGED
@@ -1,10 +1,16 @@
1
1
  language: ruby
2
2
 
3
3
  rvm:
4
- - 1.9.3
5
- - 2.0.0
4
+ - 2.3
5
+ - 2.4
6
+ - 2.5
7
+ - 2.6
6
8
  - ruby-head
7
9
 
10
+ before_install:
11
+ - yes | gem update --system --force
12
+ - gem install bundler
13
+
8
14
  matrix:
9
15
  allow_failures:
10
16
  - rvm: ruby-head
data/CHANGELOG.md CHANGED
@@ -1,4 +1,19 @@
1
1
 
2
+ ## 0.4.3
3
+
4
+ ### enhancements
5
+ * [#307] Add support for Sidekiq 7 [holstvoogd]
6
+ * [#278] Add sidekiq queue config [IlkhamGaysin]
7
+
8
+ ## 0.4.2
9
+
10
+ ### enhancements
11
+ * Allow overridden worker to set a queue name
12
+ * [#190] Respect Carrierwave's enable_processing flag if set to false [jherdman]
13
+
14
+ ### bug fixes
15
+ * [#216] Fix for NoMethodError: undefined method `read' for nil:NilClass [kntmrkm]
16
+
2
17
  ## 0.4.1
3
18
 
4
19
  ### enhancements
@@ -88,4 +103,3 @@
88
103
  ### bug fixes
89
104
  * Girl Friday incorrectly referenses class #92
90
105
  * Add documentation for testing with rspec #84.
91
-
data/README.md CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  [![Build Status](https://secure.travis-ci.org/lardawge/carrierwave_backgrounder.png)](http://travis-ci.org/lardawge/carrierwave_backgrounder)
4
4
  [![Code Climate](https://codeclimate.com/github/lardawge/carrierwave_backgrounder.png)](https://codeclimate.com/github/lardawge/carrierwave_backgrounder)
5
- [![Still Maintained](http://stillmaintained.com/lardawge/carrierwave_backgrounder.png)](http://stillmaintained.com/lardawge/carrierwave_backgrounder)
6
5
 
7
6
  I like CarrierWave. That being said, I don't like tying up app instances waiting for images to process.
8
7
 
@@ -34,7 +33,7 @@ Backgrounder::ORM::Base::store_in_background
34
33
 
35
34
  ## Installation and Usage
36
35
 
37
- These instructions assume you have previously set up [CarrierWave](https://github.com/jnicklas/carrierwave) and your queing lib of choice.
36
+ These instructions assume you have previously set up [CarrierWave](https://github.com/jnicklas/carrierwave) and your queuing lib of choice.
38
37
 
39
38
  In Rails, add the following your Gemfile:
40
39
 
@@ -55,6 +54,14 @@ CarrierWave::Backgrounder.configure do |c|
55
54
  end
56
55
  ```
57
56
 
57
+ **IMPORTANT FOR SIDEKIQ BACKEND** - Custom queue should be defined inside the Sidekiq configuration otherwise jobs won't be processed:
58
+
59
+ ```yml
60
+ :queues:
61
+ - [awesome_queue, 1]
62
+ - default
63
+ ```
64
+
58
65
  In your CarrierWave uploader file:
59
66
 
60
67
  ```ruby
@@ -74,10 +81,11 @@ mount_uploader :avatar, AvatarUploader
74
81
  process_in_background :avatar
75
82
  ```
76
83
 
77
- Optionally you can add a column to the database which will be set to nil when the background processing is complete.
84
+ Optionally you can add a column to the database which will be set to `true` when
85
+ the background processing is started and to `false` when the background processing is complete.
78
86
 
79
87
  ```ruby
80
- add_column :users, :avatar_processing, :boolean
88
+ add_column :users, :avatar_processing, :boolean, null: false, default: false
81
89
  ```
82
90
 
83
91
  ### To use store_in_background
@@ -114,7 +122,7 @@ This must be set before you assign an upload:
114
122
  ```
115
123
 
116
124
  ### Override worker
117
- To overide the worker in cases where additional methods need to be called or you have app specific requirements, pass the worker class as the
125
+ To override the worker in cases where additional methods need to be called or you have app specific requirements, pass the worker class as the
118
126
  second argument:
119
127
 
120
128
  ```ruby
@@ -134,9 +142,36 @@ class MyParanoidWorker < ::CarrierWave::Workers::ProcessAsset
134
142
  # other hooks you might care about
135
143
  end
136
144
  ```
145
+
146
+ ### ActiveJob
147
+ Use overriden worker that inherits from ActiveJob::Base and includes relevant worker mixin:
148
+ ```ruby
149
+ class MyActiveJobWorker < ActiveJob::Base
150
+ include ::CarrierWave::Workers::ProcessAssetMixin
151
+ # ... or include ::CarrierWave::Workers::StoreAssetMixin
152
+
153
+ after_perform do
154
+ # your code here
155
+ end
156
+
157
+ # Sometimes job gets performed before the file is uploaded and ready.
158
+ # You can define how to handle that case by overriding `when_not_ready` method
159
+ # (by default it does nothing)
160
+ def when_not_ready
161
+ retry_job
162
+ end
163
+ end
164
+ ```
165
+ Don't forget to set `active_job` as a backend in the config:
166
+ ```ruby
167
+ CarrierWave::Backgrounder.configure do |c|
168
+ c.backend :active_job, queue: :carrierwave
169
+ end
170
+ ```
171
+
137
172
  ### Testing with Rspec
138
173
  We use the after_commit hook when using active_record. This creates a problem when testing with Rspec because after_commit never gets fired
139
- if you're using trasactional fixtures. One solution to the problem is to use the [TestAfterCommit gem](https://github.com/grosser/test_after_commit).
174
+ if you're using transactional fixtures. One solution to the problem is to use the [TestAfterCommit gem](https://github.com/grosser/test_after_commit).
140
175
  There are various other solutions in which case google is your friend.
141
176
 
142
177
  ### Uploaders mounted on mongoid embedded documents
@@ -17,9 +17,8 @@ Gem::Specification.new do |s|
17
17
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
18
  s.require_paths = ["lib"]
19
19
 
20
- s.add_dependency "carrierwave", ["~> 0.5"]
20
+ s.add_dependency "carrierwave", [">= 0.5", "< 2.2"]
21
21
 
22
- s.add_development_dependency "rspec", ["~> 2.12.0"]
23
- s.add_development_dependency "mocha", ["~> 0.13.0"]
22
+ s.add_development_dependency "rspec", ["~> 3.10.0"]
24
23
  s.add_development_dependency "rake"
25
24
  end
@@ -17,7 +17,8 @@ module CarrierWave
17
17
  private
18
18
 
19
19
  def proceed_with_versioning?
20
- !model.respond_to?(:"process_#{mounted_as}_upload") || model.send(:"process_#{mounted_as}_upload")
20
+ !model.respond_to?(:"process_#{mounted_as}_upload") && enable_processing ||
21
+ !!(model.send(:"process_#{mounted_as}_upload") && enable_processing)
21
22
  end
22
23
  end # Delay
23
24
 
@@ -82,7 +82,7 @@ module CarrierWave
82
82
 
83
83
  def write_#{column}_identifier
84
84
  super and return if process_#{column}_upload
85
- self.#{column}_tmp = _mounter(:#{column}).cache_name if _mounter(:#{column}).cache_name
85
+ self.#{column}_tmp = #{column}_cache if #{column}_cache
86
86
  end
87
87
 
88
88
  def store_#{column}!
@@ -26,7 +26,7 @@ module CarrierWave
26
26
 
27
27
  def write_#{column}_identifier
28
28
  super and return if process_#{column}_upload
29
- self.#{column}_tmp = _mounter(:#{column}).cache_name
29
+ self.#{column}_tmp = #{column}_cache
30
30
  end
31
31
  RUBY
32
32
  end
@@ -22,11 +22,19 @@ module CarrierWave
22
22
 
23
23
  private
24
24
 
25
+ def enqueue_active_job(worker, *args)
26
+ worker.perform_later(*args.map(&:to_s))
27
+ end
28
+
25
29
  def enqueue_delayed_job(worker, *args)
30
+ worker_args = {}
26
31
  if ::Delayed::Job.new.respond_to?(:queue)
27
- ::Delayed::Job.enqueue worker.new(*args), :queue => queue_options[:queue]
32
+ worker_args[:queue] = queue_options[:queue] if queue_options[:queue]
33
+ worker_args[:priority] = queue_options[:priority] if queue_options[:priority]
34
+ ::Delayed::Job.enqueue worker.new(*args), worker_args
28
35
  else
29
- ::Delayed::Job.enqueue worker.new(*args)
36
+ worker_args[:priority] = queue_options[:priority] if queue_options[:priority]
37
+ ::Delayed::Job.enqueue worker.new(*args), worker_args
30
38
  if queue_options[:queue]
31
39
  ::Rails.logger.warn("Queue name given but no queue column exists for Delayed::Job")
32
40
  end
@@ -39,7 +47,8 @@ module CarrierWave
39
47
  end
40
48
 
41
49
  def enqueue_sidekiq(worker, *args)
42
- args = sidekiq_queue_options('class' => worker, 'args' => args)
50
+ override_queue_name = worker.sidekiq_options['queue'] == 'default' || worker.sidekiq_options['queue'].nil?
51
+ args = sidekiq_queue_options(override_queue_name, 'class' => worker, 'args' => args.map(&:to_s))
43
52
  worker.client_push(args)
44
53
  end
45
54
 
@@ -69,8 +78,10 @@ module CarrierWave
69
78
  worker.new(*args).perform
70
79
  end
71
80
 
72
- def sidekiq_queue_options(args)
73
- args['queue'] = queue_options[:queue] if queue_options[:queue]
81
+ def sidekiq_queue_options(override_queue_name, args)
82
+ if override_queue_name && queue_options[:queue]
83
+ args['queue'] = queue_options[:queue]
84
+ end
74
85
  args['retry'] = queue_options[:retry] unless queue_options[:retry].nil?
75
86
  args['timeout'] = queue_options[:timeout] if queue_options[:timeout]
76
87
  args['backtrace'] = queue_options[:backtrace] if queue_options[:backtrace]
@@ -1,5 +1,5 @@
1
1
  module CarrierWave
2
2
  module Backgrounder
3
- VERSION = "0.4.1"
3
+ VERSION = "0.4.3"
4
4
  end
5
5
  end
@@ -1,14 +1,18 @@
1
+ # encoding: utf-8
1
2
  module CarrierWave
2
3
  module Workers
3
- class Base < Struct.new(:klass, :id, :column)
4
4
 
5
- def self.perform(*args)
6
- new(*args).perform
5
+ module Base
6
+ attr_accessor :klass, :id, :column, :record
7
+
8
+ def initialize(*args)
9
+ super(*args) unless self.class.superclass == Object
10
+ set_args(*args) if args.present?
7
11
  end
8
12
 
9
13
  def perform(*args)
10
14
  set_args(*args) if args.present?
11
- constantized_resource.find id
15
+ self.record = constantized_resource.find id
12
16
  rescue *not_found_errors
13
17
  end
14
18
 
@@ -29,6 +33,10 @@ module CarrierWave
29
33
  klass.is_a?(String) ? klass.constantize : klass
30
34
  end
31
35
 
32
- end
33
- end
34
- end
36
+ def when_not_ready
37
+ end
38
+
39
+ end # Base
40
+
41
+ end # Workers
42
+ end # CarrierWave
@@ -0,0 +1,14 @@
1
+ # encoding: utf-8
2
+ module CarrierWave
3
+ module Workers
4
+
5
+ module ClassMethods
6
+
7
+ def perform(*args)
8
+ new(*args).perform
9
+ end
10
+
11
+ end # ClassMethods
12
+
13
+ end # Workers
14
+ end # Backgrounder
@@ -2,19 +2,8 @@
2
2
  module CarrierWave
3
3
  module Workers
4
4
 
5
- class ProcessAsset < Base
6
-
7
- def perform(*args)
8
- record = super(*args)
9
-
10
- if record
11
- record.send(:"process_#{column}_upload=", true)
12
- if record.send(:"#{column}").recreate_versions! && record.respond_to?(:"#{column}_processing")
13
- record.update_attribute :"#{column}_processing", false
14
- end
15
- end
16
- end
17
-
5
+ class ProcessAsset
6
+ include CarrierWave::Workers::ProcessAssetMixin
18
7
  end # ProcessAsset
19
8
 
20
9
  end # Workers
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+ module CarrierWave
3
+ module Workers
4
+
5
+ module ProcessAssetMixin
6
+ include CarrierWave::Workers::Base
7
+
8
+ def self.included(base)
9
+ base.extend CarrierWave::Workers::ClassMethods
10
+ end
11
+
12
+ def perform(*args)
13
+ record = super(*args)
14
+
15
+ if record && record.send(:"#{column}").present?
16
+ record.send(:"process_#{column}_upload=", true)
17
+ if record.send(:"#{column}").recreate_versions! && record.respond_to?(:"#{column}_processing")
18
+ record.update_attribute :"#{column}_processing", false
19
+ end
20
+ else
21
+ when_not_ready
22
+ end
23
+ end
24
+
25
+ end # ProcessAssetMixin
26
+
27
+ end # Workers
28
+ end # Backgrounder
@@ -2,32 +2,8 @@
2
2
  module CarrierWave
3
3
  module Workers
4
4
 
5
- class StoreAsset < Base
6
- attr_reader :cache_path, :tmp_directory
7
-
8
- def perform(*args)
9
- record = super(*args)
10
-
11
- if record && record.send(:"#{column}_tmp")
12
- store_directories(record)
13
- record.send :"process_#{column}_upload=", true
14
- record.send :"#{column}_tmp=", nil
15
- record.send :"#{column}_processing=", false if record.respond_to?(:"#{column}_processing")
16
- File.open(cache_path) { |f| record.send :"#{column}=", f }
17
- if record.save!
18
- FileUtils.rm_r(tmp_directory, :force => true)
19
- end
20
- end
21
- end
22
-
23
- private
24
-
25
- def store_directories(record)
26
- asset, asset_tmp = record.send(:"#{column}"), record.send(:"#{column}_tmp")
27
- cache_directory = File.expand_path(asset.cache_dir, asset.root)
28
- @cache_path = File.join(cache_directory, asset_tmp)
29
- @tmp_directory = File.join(cache_directory, asset_tmp.split("/").first)
30
- end
5
+ class StoreAsset
6
+ include CarrierWave::Workers::StoreAssetMixin
31
7
  end # StoreAsset
32
8
 
33
9
  end # Workers
@@ -0,0 +1,43 @@
1
+ # encoding: utf-8
2
+ module CarrierWave
3
+ module Workers
4
+
5
+ module StoreAssetMixin
6
+ include CarrierWave::Workers::Base
7
+
8
+ def self.included(base)
9
+ base.extend CarrierWave::Workers::ClassMethods
10
+ end
11
+
12
+ attr_reader :cache_path, :tmp_directory
13
+
14
+ def perform(*args)
15
+ record = super(*args)
16
+
17
+ if record && record.send(:"#{column}_tmp")
18
+ store_directories(record)
19
+ record.send :"process_#{column}_upload=", true
20
+ record.send :"#{column}_tmp=", nil
21
+ record.send :"#{column}_processing=", false if record.respond_to?(:"#{column}_processing")
22
+ File.open(cache_path) { |f| record.send :"#{column}=", f }
23
+ if record.save!
24
+ FileUtils.rm_r(tmp_directory, :force => true)
25
+ end
26
+ else
27
+ when_not_ready
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def store_directories(record)
34
+ asset, asset_tmp = record.send(:"#{column}"), record.send(:"#{column}_tmp")
35
+ cache_directory = File.expand_path(asset.cache_dir, asset.root)
36
+ @cache_path = File.join(cache_directory, asset_tmp)
37
+ @tmp_directory = File.join(cache_directory, asset_tmp.split("/").first)
38
+ end
39
+
40
+ end # StoreAssetMixin
41
+
42
+ end # Workers
43
+ end # Backgrounder
@@ -1,3 +1,6 @@
1
1
  require 'backgrounder/workers/base'
2
+ require 'backgrounder/workers/class_methods'
3
+ require 'backgrounder/workers/process_asset_mixin'
4
+ require 'backgrounder/workers/store_asset_mixin'
2
5
  require 'backgrounder/workers/process_asset'
3
6
  require 'backgrounder/workers/store_asset'
@@ -1,5 +1,6 @@
1
1
  CarrierWave::Backgrounder.configure do |c|
2
2
  c.backend :delayed_job, queue: :carrierwave
3
+ # c.backend :active_job, queue: :carrierwave
3
4
  # c.backend :resque, queue: :carrierwave
4
5
  # c.backend :sidekiq, queue: :carrierwave
5
6
  # c.backend :girl_friday, queue: :carrierwave
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
  require 'ostruct'
3
3
  require 'backgrounder/orm/activemodel'
4
4
 
5
- describe CarrierWave::Backgrounder::ORM::ActiveModel do
5
+ RSpec.describe CarrierWave::Backgrounder::ORM::ActiveModel do
6
6
  before do
7
7
  @mock_class = Class.new do
8
8
  def self.before_save(method, opts); nil; end
@@ -20,7 +20,7 @@ describe CarrierWave::Backgrounder::ORM::ActiveModel do
20
20
  describe '.store_in_background' do
21
21
  context 'setting up callbacks' do
22
22
  it 'creates an after_commit hook' do
23
- @mock_class.expects(:after_commit).with(:enqueue_avatar_background_job, :if => :enqueue_avatar_background_job?)
23
+ expect(@mock_class).to receive(:after_commit).with(:enqueue_avatar_background_job, :if => :enqueue_avatar_background_job?)
24
24
  @mock_class.store_in_background :avatar
25
25
  end
26
26
  end
@@ -29,12 +29,12 @@ describe CarrierWave::Backgrounder::ORM::ActiveModel do
29
29
  describe '.process_in_background' do
30
30
  context 'setting up callbacks' do
31
31
  it 'creates a before_save hook' do
32
- @mock_class.expects(:before_save).with(:set_avatar_processing, :if => :enqueue_avatar_background_job?)
32
+ expect(@mock_class).to receive(:before_save).with(:set_avatar_processing, :if => :enqueue_avatar_background_job?)
33
33
  @mock_class.process_in_background :avatar
34
34
  end
35
35
 
36
36
  it 'creates an after_save hook' do
37
- @mock_class.expects(:after_commit).with(:enqueue_avatar_background_job, :if => :enqueue_avatar_background_job?)
37
+ expect(@mock_class).to receive(:after_commit).with(:enqueue_avatar_background_job, :if => :enqueue_avatar_background_job?)
38
38
  @mock_class.process_in_background :avatar
39
39
  end
40
40
  end
@@ -50,48 +50,48 @@ describe CarrierWave::Backgrounder::ORM::ActiveModel do
50
50
  context 'mount_on option is set' do
51
51
  before do
52
52
  options_hash = {:avatar => {:mount_on => :some_other_column}}
53
- @mock_class.expects(:uploader_options).returns(options_hash)
53
+ expect(@mock_class).to receive(:uploader_options).and_return(options_hash)
54
54
  end
55
55
 
56
56
  it "returns true if alternate column is changed" do
57
- instance.expects(:some_other_column_changed?).returns(true)
58
- expect(instance.avatar_updated?).to be_true
57
+ expect(instance).to receive(:some_other_column_changed?).and_return(true)
58
+ expect(instance.avatar_updated?).to be_truthy
59
59
  end
60
60
  end
61
61
 
62
62
  it "returns true if process_avatar_upload is false" do
63
- instance.expects(:process_avatar_upload)
64
- expect(instance.enqueue_avatar_background_job?).to be_true
63
+ expect(instance).to receive(:process_avatar_upload)
64
+ expect(instance.enqueue_avatar_background_job?).to be_truthy
65
65
  end
66
66
 
67
67
  it "calls column_changed?" do
68
- instance.expects(:process_avatar_upload).returns(false)
69
- instance.expects(:avatar_changed?)
70
- expect(instance.enqueue_avatar_background_job?).to be_true
68
+ expect(instance).to receive(:process_avatar_upload).and_return(false)
69
+ expect(instance).to receive(:avatar_changed?)
70
+ expect(instance.enqueue_avatar_background_job?).to be_truthy
71
71
  end
72
72
 
73
73
  it "calls previous_changes" do
74
- instance.expects(:process_avatar_upload).returns(false)
75
- instance.expects(:avatar_changed?).returns(false)
76
- instance.expects(:previous_changes).returns({:avatar => true})
77
- expect(instance.enqueue_avatar_background_job?).to be_true
74
+ expect(instance).to receive(:process_avatar_upload).and_return(false)
75
+ expect(instance).to receive(:avatar_changed?).and_return(false)
76
+ expect(instance).to receive(:previous_changes).and_return({:avatar => true})
77
+ expect(instance.enqueue_avatar_background_job?).to be_truthy
78
78
  end
79
79
 
80
80
  it "calls avatar_remote_url" do
81
- instance.expects(:process_avatar_upload).returns(false)
82
- instance.expects(:avatar_changed?).returns(false)
83
- instance.expects(:previous_changes).returns({})
84
- instance.expects(:remote_avatar_url).returns('yup')
85
- expect(instance.enqueue_avatar_background_job?).to be_true
81
+ expect(instance).to receive(:process_avatar_upload).and_return(false)
82
+ expect(instance).to receive(:avatar_changed?).and_return(false)
83
+ expect(instance).to receive(:previous_changes).and_return({})
84
+ expect(instance).to receive(:remote_avatar_url).and_return('yup')
85
+ expect(instance.enqueue_avatar_background_job?).to be_truthy
86
86
  end
87
87
 
88
88
  it "calls avatar_cache" do
89
- instance.expects(:process_avatar_upload).returns(false)
90
- instance.expects(:avatar_changed?).returns(false)
91
- instance.expects(:previous_changes).returns({})
92
- instance.expects(:remote_avatar_url).returns(nil)
93
- instance.expects(:avatar_cache).returns('yup')
94
- expect(instance.enqueue_avatar_background_job?).to be_true
89
+ expect(instance).to receive(:process_avatar_upload).and_return(false)
90
+ expect(instance).to receive(:avatar_changed?).and_return(false)
91
+ expect(instance).to receive(:previous_changes).and_return({})
92
+ expect(instance).to receive(:remote_avatar_url).and_return(nil)
93
+ expect(instance).to receive(:avatar_cache).and_return('yup')
94
+ expect(instance.enqueue_avatar_background_job?).to be_truthy
95
95
  end
96
96
  end
97
97
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
 
4
- describe CarrierWave::Backgrounder::ORM::Base do
4
+ RSpec.describe CarrierWave::Backgrounder::ORM::Base do
5
5
  before do
6
6
  @mock_class = Class.new do
7
7
  def self.before_save(method, opts); nil; end
@@ -3,7 +3,7 @@ require 'support/backend_constants'
3
3
  require 'support/mock_worker'
4
4
 
5
5
  module CarrierWave::Backgrounder
6
- describe Support::Backends do
6
+ RSpec.describe Support::Backends do
7
7
  let(:mock_module) { Module.new }
8
8
 
9
9
  before do
@@ -31,25 +31,43 @@ module CarrierWave::Backgrounder
31
31
  describe '#enqueue_for_backend' do
32
32
  let!(:worker) { MockWorker.new('FakeClass', 1, :image) }
33
33
 
34
+ context 'active_job' do
35
+ let(:args) { ['FakeClass', 1, :image] }
36
+
37
+ it 'invokes perform_later with string arguments' do
38
+ expect(MockWorker).to receive(:perform_later).with('FakeClass', '1', 'image')
39
+ mock_module.backend :active_job
40
+ mock_module.enqueue_for_backend(MockWorker, *args)
41
+ end
42
+ end
43
+
34
44
  context 'delayed_job' do
35
45
  before do
36
46
  @mock_worker = Class.new do
37
47
  def self.perform(*args); new(*args).perform; end
38
48
  end
39
49
 
40
- MockWorker.expects(:new).returns(worker)
50
+ allow(MockWorker).to receive(:new).and_return(worker)
41
51
  end
42
52
 
43
53
  context 'queue column exists' do
44
- it 'defaults the queue name to nil if none passed to #backend' do
54
+ it 'does not pass the queue name if none passed to #backend' do
45
55
  mock_module.backend :delayed_job
46
- Delayed::Job.expects(:enqueue).with(worker, :queue => nil)
56
+ expect(Delayed::Job).to receive(:enqueue).with(worker, {})
47
57
  mock_module.enqueue_for_backend MockWorker, 'FakeClass', 1, :image
48
58
  end
49
59
 
50
60
  it 'sets the queue name to the queue name passed to #backend' do
51
61
  mock_module.backend :delayed_job, :queue => :awesome_queue
52
- Delayed::Job.expects(:enqueue).with(worker, :queue => :awesome_queue)
62
+ expect(Delayed::Job).to receive(:enqueue).with(worker, :queue => :awesome_queue)
63
+ mock_module.enqueue_for_backend MockWorker, 'FakeClass', 1, :image
64
+ end
65
+ end
66
+
67
+ context 'priority set in config' do
68
+ it 'sets the priority which is passed to #backend' do
69
+ mock_module.backend :delayed_job, :priority => 5
70
+ expect(Delayed::Job).to receive(:enqueue).with(worker, :priority => 5)
53
71
  mock_module.enqueue_for_backend MockWorker, 'FakeClass', 1, :image
54
72
  end
55
73
  end
@@ -57,7 +75,7 @@ module CarrierWave::Backgrounder
57
75
  context 'queue column does not exist' do
58
76
  before do
59
77
  column_names = Delayed::Job.column_names.tap { |cn| cn.delete('queue') }
60
- Delayed::Job.stubs(:column_names).returns(column_names)
78
+ allow(Delayed::Job).to receive(:column_names).and_return(column_names)
61
79
  Delayed::Job.class_eval { remove_method(:queue) }
62
80
  end
63
81
 
@@ -67,14 +85,14 @@ module CarrierWave::Backgrounder
67
85
 
68
86
  it 'does not pass a queue name if none passed to #backend' do
69
87
  mock_module.backend :delayed_job
70
- Delayed::Job.expects(:enqueue).with(worker)
88
+ expect(Delayed::Job).to receive(:enqueue).with(worker, {})
71
89
  mock_module.enqueue_for_backend MockWorker, 'FakeClass', 1, :image
72
90
  end
73
91
 
74
92
  it 'does not pass a queue name and logs a warning message if a queue name is passed to #backend' do
75
93
  mock_module.backend :delayed_job, :queue => :awesome_queue
76
- Delayed::Job.expects(:enqueue).with(worker)
77
- Rails.logger.expects(:warn).with(instance_of(String))
94
+ expect(Rails.logger).to receive(:warn).with(instance_of(String))
95
+ expect(Delayed::Job).to receive(:enqueue).with(worker, {})
78
96
  mock_module.enqueue_for_backend MockWorker, 'FakeClass', 1, :image
79
97
  end
80
98
  end
@@ -84,7 +102,7 @@ module CarrierWave::Backgrounder
84
102
  let(:args) { [MockWorker, 'FakeClass', 1, :image] }
85
103
 
86
104
  before do
87
- Resque.expects(:enqueue).with(*args)
105
+ allow(Resque).to receive(:enqueue).with(*args)
88
106
  end
89
107
 
90
108
  it 'sets a variable with the queue name, defaults to :carrierwave' do
@@ -104,21 +122,31 @@ module CarrierWave::Backgrounder
104
122
  let(:args) { ['FakeClass', 1, :image] }
105
123
 
106
124
  it 'invokes client_push on the class with passed args' do
107
- MockSidekiqWorker.expects(:client_push).with({ 'class' => MockSidekiqWorker, 'args' => args })
125
+ expect(MockSidekiqWorker).to receive(:client_push).with({ 'class' => MockSidekiqWorker, 'args' => args.map(&:to_s) })
108
126
  mock_module.backend :sidekiq
109
127
  mock_module.enqueue_for_backend(MockSidekiqWorker, *args)
110
128
  end
111
129
 
112
130
  it 'invokes client_push and includes the options passed to backend' do
113
- MockSidekiqWorker.expects(:client_push).with({ 'class' => MockSidekiqWorker,
114
- 'retry' => false,
115
- 'timeout' => 60,
116
- 'queue' => :awesome_queue,
117
- 'args' => args })
131
+ expect(MockSidekiqWorker).to receive(:client_push).with({ 'class' => MockSidekiqWorker,
132
+ 'retry' => false,
133
+ 'timeout' => 60,
134
+ 'queue' => :awesome_queue,
135
+ 'args' => args.map(&:to_s) })
118
136
  options = {:retry => false, :timeout => 60, :queue => :awesome_queue}
119
137
  mock_module.backend :sidekiq, options
120
138
  mock_module.enqueue_for_backend(MockSidekiqWorker, *args)
121
139
  end
140
+
141
+ it 'does not override queue name if set it worker' do
142
+ expect(MockNamedSidekiqWorker).to receive(:client_push).with({ 'class' => MockNamedSidekiqWorker,
143
+ 'retry' => false,
144
+ 'timeout' => 60,
145
+ 'args' => args.map(&:to_s) })
146
+ options = {:retry => false, :timeout => 60}
147
+ mock_module.backend :sidekiq, options
148
+ mock_module.enqueue_for_backend(MockNamedSidekiqWorker, *args)
149
+ end
122
150
  end
123
151
 
124
152
  context 'girl_friday' do
@@ -126,20 +154,20 @@ module CarrierWave::Backgrounder
126
154
 
127
155
  it 'instantiates a GirlFriday work queue if one does not exist' do
128
156
  mock_module.backend :girl_friday
129
- GirlFriday::WorkQueue.expects(:new).with(:carrierwave, {}).returns([])
157
+ expect(GirlFriday::WorkQueue).to receive(:new).with(:carrierwave, {}).and_return([])
130
158
  mock_module.enqueue_for_backend(*args)
131
159
  end
132
160
 
133
161
  it 'instantiates a GirlFriday work queue passing the args to the queue' do
134
162
  mock_module.backend :girl_friday, :queue => :awesome_queue, :size => 3
135
- GirlFriday::WorkQueue.expects(:new).with(:awesome_queue, {:size => 3}).returns([])
163
+ expect(GirlFriday::WorkQueue).to receive(:new).with(:awesome_queue, {:size => 3}).and_return([])
136
164
  mock_module.enqueue_for_backend(*args)
137
165
  end
138
166
 
139
167
  it 'does not instantiate a GirlFriday work queue if one exists' do
140
168
  mock_module.backend :girl_friday
141
169
  mock_module.instance_variable_set('@girl_friday_queue', [])
142
- GirlFriday::WorkQueue.expects(:new).never
170
+ expect(GirlFriday::WorkQueue).to receive(:new).never
143
171
  mock_module.enqueue_for_backend(*args)
144
172
  end
145
173
 
@@ -154,12 +182,12 @@ module CarrierWave::Backgrounder
154
182
 
155
183
  context 'sucker_punch' do
156
184
  let(:args) { [MockWorker, 'FakeClass', 1, :image] }
157
- let(:job) { mock('job') }
185
+ let(:job) { double('job') }
158
186
 
159
187
  it 'invokes a new worker' do
160
- MockWorker.expects(:new).returns(worker)
161
- worker.expects(:async).returns(job)
162
- job.expects(:perform).with('FakeClass', 1, :image)
188
+ expect(MockWorker).to receive(:new).and_return(worker)
189
+ expect(worker).to receive(:async).and_return(job)
190
+ expect(job).to receive(:perform).with('FakeClass', 1, :image)
163
191
  mock_module.backend :sucker_punch
164
192
  mock_module.enqueue_for_backend(*args)
165
193
  end
@@ -168,7 +196,7 @@ module CarrierWave::Backgrounder
168
196
  context 'qu' do
169
197
  let(:args) { [MockWorker, 'FakeClass', 1, :image] }
170
198
  before do
171
- Qu.expects(:enqueue).with(*args)
199
+ allow(Qu).to receive(:enqueue).with(*args)
172
200
  end
173
201
 
174
202
  it 'sets a variable with the queue name, defaults to :carrierwave' do
@@ -186,7 +214,7 @@ module CarrierWave::Backgrounder
186
214
 
187
215
  context 'qc' do
188
216
  it 'calls enqueue with the passed args' do
189
- QC.expects(:enqueue).with("MockWorker.perform", 'FakeClass', 1, 'image')
217
+ expect(QC).to receive(:enqueue).with("MockWorker.perform", 'FakeClass', 1, 'image')
190
218
  mock_module.backend :qc
191
219
  mock_module.enqueue_for_backend(MockWorker, 'FakeClass', 1, :image)
192
220
  end
@@ -194,14 +222,13 @@ module CarrierWave::Backgrounder
194
222
 
195
223
  context 'immediate' do
196
224
  it 'instantiates a worker passing the args and calls perform' do
197
- worker = mock('Worker')
198
- MockWorker.expects(:new).with('FakeClass', 1, :image).returns(worker)
199
- worker.expects(:perform)
225
+ worker = double('Worker')
226
+ expect(MockWorker).to receive(:new).with('FakeClass', 1, :image).and_return(worker)
227
+ expect(worker).to receive(:perform)
200
228
  mock_module.backend :immediate
201
229
  mock_module.enqueue_for_backend(MockWorker, 'FakeClass', 1, :image)
202
230
  end
203
231
  end
204
-
205
232
  end
206
233
  end
207
234
  end
@@ -2,55 +2,55 @@
2
2
  require 'spec_helper'
3
3
  require 'backgrounder/workers/process_asset'
4
4
 
5
- describe CarrierWave::Workers::ProcessAsset do
5
+ RSpec.describe CarrierWave::Workers::ProcessAsset do
6
6
  let(:worker_class) { CarrierWave::Workers::ProcessAsset }
7
- let(:user) { mock('User') }
7
+ let(:user) { double('User') }
8
8
  let!(:worker) { worker_class.new(user, '22', :image) }
9
9
 
10
10
  describe ".perform" do
11
11
  it 'creates a new instance and calls perform' do
12
12
  args = [user, '22', :image]
13
- worker_class.expects(:new).with(*args).returns(worker)
14
- worker_class.any_instance.expects(:perform)
13
+ expect(worker_class).to receive(:new).with(*args).and_return(worker)
14
+ expect_any_instance_of(worker_class).to receive(:perform)
15
15
 
16
16
  worker_class.perform(*args)
17
17
  end
18
18
  end
19
19
 
20
20
  describe "#perform" do
21
- let(:image) { mock('UserAsset') }
21
+ let(:image) { double('UserAsset') }
22
22
 
23
23
  before do
24
- user.expects(:find).with('22').returns(user).once
25
- user.expects(:image).once.returns(image)
26
- user.expects(:process_image_upload=).with(true).once
27
- image.expects(:recreate_versions!).once.returns(true)
24
+ allow(user).to receive(:find).with('22').and_return(user).once
25
+ allow(user).to receive(:image).twice.and_return(image)
26
+ allow(user).to receive(:process_image_upload=).with(true).once
27
+ allow(image).to receive(:recreate_versions!).once.and_return(true)
28
28
  end
29
29
 
30
30
  it 'processes versions with image_processing column' do
31
- user.expects(:respond_to?).with(:image_processing).once.returns(true)
32
- user.expects(:update_attribute).with(:image_processing, false).once
31
+ expect(user).to receive(:respond_to?).with(:image_processing).once.and_return(true)
32
+ expect(user).to receive(:update_attribute).with(:image_processing, false).once
33
33
  worker.perform
34
34
  end
35
35
 
36
36
  it 'processes versions without image_processing column' do
37
- user.expects(:respond_to?).with(:image_processing).once.returns(false)
38
- user.expects(:update_attribute).never
37
+ expect(user).to receive(:respond_to?).with(:image_processing).once.and_return(false)
38
+ expect(user).to receive(:update_attribute).never
39
39
  worker.perform
40
40
  end
41
41
  end
42
42
 
43
43
  describe '#perform with args' do
44
- let(:admin) { mock('Admin') }
45
- let(:avatar) { mock('AdminAsset') }
44
+ let(:admin) { double('Admin') }
45
+ let(:avatar) { double('AdminAsset') }
46
46
  let(:worker) { worker_class.new }
47
47
 
48
48
  before do
49
- admin.expects(:find).with('23').returns(admin).once
50
- admin.expects(:avatar).once.returns(avatar)
51
- admin.expects(:process_avatar_upload=).with(true).once
52
- admin.expects(:respond_to?).with(:avatar_processing).once.returns(false)
53
- avatar.expects(:recreate_versions!).once.returns(true)
49
+ allow(admin).to receive(:find).with('23').and_return(admin).once
50
+ allow(admin).to receive(:avatar).twice.and_return(avatar)
51
+ allow(admin).to receive(:process_avatar_upload=).with(true).once
52
+ allow(admin).to receive(:respond_to?).with(:avatar_processing).once.and_return(false)
53
+ allow(avatar).to receive(:recreate_versions!).once.and_return(true)
54
54
 
55
55
  worker.perform admin, '23', :avatar
56
56
  end
@@ -2,75 +2,75 @@
2
2
  require 'spec_helper'
3
3
  require 'backgrounder/workers/store_asset'
4
4
 
5
- describe CarrierWave::Workers::StoreAsset do
5
+ RSpec.describe CarrierWave::Workers::StoreAsset do
6
6
  let(:fixtures_path) { File.expand_path('../fixtures/images', __FILE__) }
7
7
  let(:worker_class) { CarrierWave::Workers::StoreAsset }
8
- let(:user) { mock('User') }
8
+ let(:user) { double('User') }
9
9
  let!(:worker) { worker_class.new(user, '22', :image) }
10
10
 
11
11
  describe ".perform" do
12
12
  it 'creates a new instance and calls perform' do
13
13
  args = [user, '22', :image]
14
- worker_class.expects(:new).with(*args).returns(worker)
15
- worker_class.any_instance.expects(:perform)
14
+ expect(worker_class).to receive(:new).with(*args).and_return(worker)
15
+ expect_any_instance_of(worker_class).to receive(:perform)
16
16
  worker_class.perform(*args)
17
17
  end
18
18
  end
19
19
 
20
20
  describe "#perform" do
21
- let(:image) { mock('UserAsset') }
21
+ let(:image) { double('UserAsset') }
22
22
 
23
23
  before do
24
- image.expects(:root).once.returns(File.expand_path('..', __FILE__))
25
- image.expects(:cache_dir).once.returns('fixtures')
26
- user.expects(:image_tmp).twice.returns('images/test.jpg')
27
- user.expects(:find).with('22').once.returns(user)
28
- user.expects(:image).once.returns(image)
29
- user.expects(:process_image_upload=).with(true).once
30
- user.expects(:image=).once
31
- user.expects(:image_tmp=).with(nil).once
24
+ allow(image).to receive(:root).once.and_return(File.expand_path('..', __FILE__))
25
+ allow(image).to receive(:cache_dir).once.and_return('fixtures')
26
+ allow(user).to receive(:image_tmp).twice.and_return('images/test.jpg')
27
+ allow(user).to receive(:find).with('22').once.and_return(user)
28
+ allow(user).to receive(:image).once.and_return(image)
29
+ allow(user).to receive(:process_image_upload=).with(true).once
30
+ allow(user).to receive(:image=).once
31
+ allow(user).to receive(:image_tmp=).with(nil).once
32
32
  end
33
33
 
34
34
  it 'removes tmp directory on success' do
35
- FileUtils.expects(:rm_r).with(fixtures_path, :force => true).once
36
- user.expects(:save!).once.returns(true)
35
+ expect(FileUtils).to receive(:rm_r).with(fixtures_path, :force => true).once
36
+ expect(user).to receive(:save!).once.and_return(true)
37
37
  worker.perform
38
38
  end
39
39
 
40
40
  it 'does not remove the tmp directory if save! fails' do
41
- FileUtils.expects(:rm_r).never
42
- user.expects(:save!).once.returns(false)
41
+ expect(FileUtils).to receive(:rm_r).never
42
+ expect(user).to receive(:save!).once.and_return(false)
43
43
  worker.perform
44
44
  end
45
45
 
46
46
  it 'sets the cache_path' do
47
- user.expects(:save!).once.returns(false)
47
+ expect(user).to receive(:save!).once.and_return(false)
48
48
  worker.perform
49
49
  expect(worker.cache_path).to eql(fixtures_path + '/test.jpg')
50
50
  end
51
51
 
52
52
  it 'sets the tmp_directory' do
53
- user.expects(:save!).once.returns(false)
53
+ expect(user).to receive(:save!).once.and_return(false)
54
54
  worker.perform
55
55
  expect(worker.tmp_directory).to eql(fixtures_path)
56
56
  end
57
57
  end
58
58
 
59
59
  describe '#perform with args' do
60
- let(:admin) { mock('Admin') }
61
- let(:image) { mock('AdminAsset') }
60
+ let(:admin) { double('Admin') }
61
+ let(:image) { double('AdminAsset') }
62
62
  let(:worker) { worker_class.new }
63
63
 
64
64
  before do
65
- image.expects(:root).once.returns(File.expand_path('..', __FILE__))
66
- image.expects(:cache_dir).once.returns('fixtures')
67
- admin.expects(:avatar_tmp).twice.returns('images/test.jpg')
68
- admin.expects(:find).with('23').once.returns(admin)
69
- admin.expects(:avatar).once.returns(image)
70
- admin.expects(:process_avatar_upload=).with(true).once
71
- admin.expects(:avatar=).once
72
- admin.expects(:avatar_tmp=).with(nil).once
73
- admin.expects(:save!).once.returns(false)
65
+ allow(image).to receive(:root).once.and_return(File.expand_path('..', __FILE__))
66
+ allow(image).to receive(:cache_dir).once.and_return('fixtures')
67
+ allow(admin).to receive(:avatar_tmp).twice.and_return('images/test.jpg')
68
+ allow(admin).to receive(:find).with('23').once.and_return(admin)
69
+ allow(admin).to receive(:avatar).once.and_return(image)
70
+ allow(admin).to receive(:process_avatar_upload=).with(true).once
71
+ allow(admin).to receive(:avatar=).once
72
+ allow(admin).to receive(:avatar_tmp=).with(nil).once
73
+ allow(admin).to receive(:save!).once.and_return(false)
74
74
  worker.perform admin, '23', :avatar
75
75
  end
76
76
 
@@ -88,15 +88,15 @@ describe CarrierWave::Workers::StoreAsset do
88
88
  end
89
89
 
90
90
  describe '#store_directories' do
91
- let(:record) { mock('Record') }
91
+ let(:record) { double('Record') }
92
92
 
93
93
  context 'cache_path' do
94
94
  it 'sets the cache_path correctly if a full path is set for the cache_dir' do
95
95
  root = '/Users/lar/Sites/bunker/public'
96
96
  cache_dir = '/Users/lar/Sites/bunker/tmp/uploads'
97
- asset = mock(:cache_dir => cache_dir, :root => root)
98
- record.expects(:image).returns(asset)
99
- record.expects(:image_tmp).returns('images/test.jpg')
97
+ asset = double(:cache_dir => cache_dir, :root => root)
98
+ expect(record).to receive(:image).and_return(asset)
99
+ expect(record).to receive(:image_tmp).and_return('images/test.jpg')
100
100
  worker.send :store_directories, record
101
101
  expect(worker.cache_path).to eql('/Users/lar/Sites/bunker/tmp/uploads/images/test.jpg')
102
102
  end
@@ -104,9 +104,9 @@ describe CarrierWave::Workers::StoreAsset do
104
104
  it 'sets the cache_path correctly if a partial path is set for cache_dir' do
105
105
  root = '/Users/lar/Sites/bunker/public'
106
106
  cache_dir = 'uploads/tmp'
107
- asset = mock(:cache_dir => cache_dir, :root => root)
108
- record.expects(:image).returns(asset)
109
- record.expects(:image_tmp).returns('images/test.jpg')
107
+ asset = double(:cache_dir => cache_dir, :root => root)
108
+ expect(record).to receive(:image).and_return(asset)
109
+ expect(record).to receive(:image_tmp).and_return('images/test.jpg')
110
110
  worker.send :store_directories, record
111
111
  expect(worker.cache_path).to eql('/Users/lar/Sites/bunker/public/uploads/tmp/images/test.jpg')
112
112
  end
@@ -116,9 +116,9 @@ describe CarrierWave::Workers::StoreAsset do
116
116
  it 'sets the tmp_directory correctly if a full path is set for the cache_dir' do
117
117
  root = '/Users/lar/Sites/bunker/public'
118
118
  cache_dir = '/Users/lar/Sites/bunker/tmp/uploads'
119
- asset = mock(:cache_dir => cache_dir, :root => root)
120
- record.expects(:image).returns(asset)
121
- record.expects(:image_tmp).returns('images/test.jpg')
119
+ asset = double(:cache_dir => cache_dir, :root => root)
120
+ expect(record).to receive(:image).and_return(asset)
121
+ expect(record).to receive(:image_tmp).and_return('images/test.jpg')
122
122
  worker.send :store_directories, record
123
123
  expect(worker.tmp_directory).to eql('/Users/lar/Sites/bunker/tmp/uploads/images')
124
124
  end
@@ -126,9 +126,9 @@ describe CarrierWave::Workers::StoreAsset do
126
126
  it 'sets the tmp_directory correctly if a partial path is set for cache_dir' do
127
127
  root = '/Users/lar/Sites/bunker/public'
128
128
  cache_dir = 'uploads/tmp'
129
- asset = mock(:cache_dir => cache_dir, :root => root)
130
- record.expects(:image).returns(asset)
131
- record.expects(:image_tmp).returns('images/test.jpg')
129
+ asset = double(:cache_dir => cache_dir, :root => root)
130
+ expect(record).to receive(:image).and_return(asset)
131
+ expect(record).to receive(:image_tmp).and_return('images/test.jpg')
132
132
  worker.send :store_directories, record
133
133
  expect(worker.tmp_directory).to eql('/Users/lar/Sites/bunker/public/uploads/tmp/images')
134
134
  end
data/spec/spec_helper.rb CHANGED
@@ -15,7 +15,6 @@ module WarningSuppression
15
15
  end
16
16
 
17
17
  RSpec.configure do |c|
18
- c.mock_with :mocha
19
18
  c.include WarningSuppression
20
19
  end
21
20
 
@@ -34,6 +34,7 @@ module Sidekiq
34
34
 
35
35
  module ClassMethods
36
36
  def sidekiq_options(opts = {})
37
+ opts
37
38
  end
38
39
 
39
40
  def client_push(item)
@@ -52,6 +53,6 @@ end
52
53
 
53
54
  module Rails
54
55
  def self.logger
55
- @logger ||= Object.new
56
+ @logger ||= Logger.new(STDOUT)
56
57
  end
57
58
  end
@@ -15,3 +15,8 @@ end
15
15
  class MockSidekiqWorker < MockWorker
16
16
  include Sidekiq::Worker
17
17
  end
18
+
19
+ class MockNamedSidekiqWorker < MockWorker
20
+ include Sidekiq::Worker
21
+ sidekiq_options queue: :even_better_name
22
+ end
metadata CHANGED
@@ -1,81 +1,73 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: carrierwave_backgrounder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Larry Sprock
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-04 00:00:00.000000000 Z
11
+ date: 2023-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: carrierwave
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0.5'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '2.2'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - ~>
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
29
  version: '0.5'
27
- - !ruby/object:Gem::Dependency
28
- name: rspec
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ~>
30
+ - - "<"
32
31
  - !ruby/object:Gem::Version
33
- version: 2.12.0
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ~>
39
- - !ruby/object:Gem::Version
40
- version: 2.12.0
32
+ version: '2.2'
41
33
  - !ruby/object:Gem::Dependency
42
- name: mocha
34
+ name: rspec
43
35
  requirement: !ruby/object:Gem::Requirement
44
36
  requirements:
45
- - - ~>
37
+ - - "~>"
46
38
  - !ruby/object:Gem::Version
47
- version: 0.13.0
39
+ version: 3.10.0
48
40
  type: :development
49
41
  prerelease: false
50
42
  version_requirements: !ruby/object:Gem::Requirement
51
43
  requirements:
52
- - - ~>
44
+ - - "~>"
53
45
  - !ruby/object:Gem::Version
54
- version: 0.13.0
46
+ version: 3.10.0
55
47
  - !ruby/object:Gem::Dependency
56
48
  name: rake
57
49
  requirement: !ruby/object:Gem::Requirement
58
50
  requirements:
59
- - - '>='
51
+ - - ">="
60
52
  - !ruby/object:Gem::Version
61
53
  version: '0'
62
54
  type: :development
63
55
  prerelease: false
64
56
  version_requirements: !ruby/object:Gem::Requirement
65
57
  requirements:
66
- - - '>='
58
+ - - ">="
67
59
  - !ruby/object:Gem::Version
68
60
  version: '0'
69
- description:
61
+ description:
70
62
  email:
71
63
  - larry@lucidbleu.com
72
64
  executables: []
73
65
  extensions: []
74
66
  extra_rdoc_files: []
75
67
  files:
76
- - .gitignore
77
- - .rspec
78
- - .travis.yml
68
+ - ".gitignore"
69
+ - ".rspec"
70
+ - ".travis.yml"
79
71
  - CHANGELOG.md
80
72
  - Gemfile
81
73
  - README.md
@@ -90,8 +82,11 @@ files:
90
82
  - lib/backgrounder/version.rb
91
83
  - lib/backgrounder/workers.rb
92
84
  - lib/backgrounder/workers/base.rb
85
+ - lib/backgrounder/workers/class_methods.rb
93
86
  - lib/backgrounder/workers/process_asset.rb
87
+ - lib/backgrounder/workers/process_asset_mixin.rb
94
88
  - lib/backgrounder/workers/store_asset.rb
89
+ - lib/backgrounder/workers/store_asset_mixin.rb
95
90
  - lib/carrierwave_backgrounder.rb
96
91
  - lib/generators/carrierwave_backgrounder/USAGE
97
92
  - lib/generators/carrierwave_backgrounder/install_generator.rb
@@ -109,24 +104,23 @@ homepage: https://github.com/lardawge/carrierwave_backgrounder
109
104
  licenses:
110
105
  - MIT
111
106
  metadata: {}
112
- post_install_message:
107
+ post_install_message:
113
108
  rdoc_options: []
114
109
  require_paths:
115
110
  - lib
116
111
  required_ruby_version: !ruby/object:Gem::Requirement
117
112
  requirements:
118
- - - '>='
113
+ - - ">="
119
114
  - !ruby/object:Gem::Version
120
115
  version: '0'
121
116
  required_rubygems_version: !ruby/object:Gem::Requirement
122
117
  requirements:
123
- - - '>='
118
+ - - ">="
124
119
  - !ruby/object:Gem::Version
125
120
  version: '0'
126
121
  requirements: []
127
- rubyforge_project:
128
- rubygems_version: 2.0.6
129
- signing_key:
122
+ rubygems_version: 3.1.6
123
+ signing_key:
130
124
  specification_version: 4
131
125
  summary: Offload CarrierWave's image processing and storage to a background process
132
126
  using Delayed Job, Resque, Sidekiq, Qu, Queue Classic or Girl Friday