diff --git a/README.md b/README.md index 520c9496..f6e02d40 100644 --- a/README.md +++ b/README.md @@ -115,7 +115,7 @@ This must be set before you assign an upload: ``` ### Override worker -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 +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 second argument: ```ruby diff --git a/lib/backgrounder/support/backends.rb b/lib/backgrounder/support/backends.rb index 6210a87e..e59a4af3 100644 --- a/lib/backgrounder/support/backends.rb +++ b/lib/backgrounder/support/backends.rb @@ -43,7 +43,8 @@ def enqueue_resque(worker, *args) end def enqueue_sidekiq(worker, *args) - args = sidekiq_queue_options('class' => worker, 'args' => args) + override_queue_name = worker.sidekiq_options['queue'] == 'default' || worker.sidekiq_options['queue'].nil? + args = sidekiq_queue_options(override_queue_name, 'class' => worker, 'args' => args) worker.client_push(args) end @@ -73,8 +74,10 @@ def enqueue_immediate(worker, *args) worker.new(*args).perform end - def sidekiq_queue_options(args) - args['queue'] = queue_options[:queue] if queue_options[:queue] && args['class'].sidekiq_options['queue'] == 'default' + def sidekiq_queue_options(override_queue_name, args) + if override_queue_name && queue_options[:queue] + args['queue'] = queue_options[:queue] + end args['retry'] = queue_options[:retry] unless queue_options[:retry].nil? args['timeout'] = queue_options[:timeout] if queue_options[:timeout] args['backtrace'] = queue_options[:backtrace] if queue_options[:backtrace] diff --git a/spec/backgrounder/support/backends_spec.rb b/spec/backgrounder/support/backends_spec.rb index 1729642e..5e40e77c 100644 --- a/spec/backgrounder/support/backends_spec.rb +++ b/spec/backgrounder/support/backends_spec.rb @@ -127,6 +127,16 @@ def self.perform(*args); new(*args).perform; end mock_module.backend :sidekiq, options mock_module.enqueue_for_backend(MockSidekiqWorker, *args) end + + it 'does not override queue name if set it worker' do + expect(MockNamedSidekiqWorker).to receive(:client_push).with({ 'class' => MockNamedSidekiqWorker, + 'retry' => false, + 'timeout' => 60, + 'args' => args }) + options = {:retry => false, :timeout => 60} + mock_module.backend :sidekiq, options + mock_module.enqueue_for_backend(MockNamedSidekiqWorker, *args) + end end context 'girl_friday' do diff --git a/spec/support/backend_constants.rb b/spec/support/backend_constants.rb index 4483daef..c3f0fb06 100644 --- a/spec/support/backend_constants.rb +++ b/spec/support/backend_constants.rb @@ -34,6 +34,7 @@ def self.included(base) module ClassMethods def sidekiq_options(opts = {}) + opts end def client_push(item) diff --git a/spec/support/mock_worker.rb b/spec/support/mock_worker.rb index af526830..94425e8c 100644 --- a/spec/support/mock_worker.rb +++ b/spec/support/mock_worker.rb @@ -15,3 +15,8 @@ def set_args(klass, id, column) class MockSidekiqWorker < MockWorker include Sidekiq::Worker end + +class MockNamedSidekiqWorker < MockWorker + include Sidekiq::Worker + sidekiq_options queue: :even_better_name +end