mirror of
https://github.com/mperham/sidekiq.git
synced 2022-11-09 13:52:34 -05:00
Allow Sidekiq::Worker#set to be chained
This commit is contained in:
parent
e1b392d3be
commit
33aedf62de
4 changed files with 71 additions and 52 deletions
|
@ -6,7 +6,8 @@ HEAD
|
||||||
---------
|
---------
|
||||||
|
|
||||||
- Better handling of malformed job arguments in payload [#4095]
|
- Better handling of malformed job arguments in payload [#4095]
|
||||||
- add back in bootstap's dropdown css component [#4099, urkle]
|
- Restore bootstap's dropdown css component [#4099, urkle]
|
||||||
|
- Allow `Sidekiq::Worker#set` to be chained
|
||||||
|
|
||||||
5.2.5
|
5.2.5
|
||||||
---------
|
---------
|
||||||
|
|
|
@ -46,6 +46,11 @@ module Sidekiq
|
||||||
@opts = opts
|
@opts = opts
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def set(options)
|
||||||
|
@opts.merge!(options)
|
||||||
|
self
|
||||||
|
end
|
||||||
|
|
||||||
def perform_async(*args)
|
def perform_async(*args)
|
||||||
@klass.client_push(@opts.merge('args' => args, 'class' => @klass))
|
@klass.client_push(@opts.merge('args' => args, 'class' => @klass))
|
||||||
end
|
end
|
||||||
|
|
|
@ -238,57 +238,6 @@ describe Sidekiq::Client do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'Sidekiq::Worker#set' do
|
|
||||||
class SetWorker
|
|
||||||
include Sidekiq::Worker
|
|
||||||
sidekiq_options :queue => :foo, 'retry' => 12
|
|
||||||
end
|
|
||||||
|
|
||||||
def setup
|
|
||||||
Sidekiq.redis {|c| c.flushdb }
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'can be memoized' do
|
|
||||||
q = Sidekiq::Queue.new('bar')
|
|
||||||
assert_equal 0, q.size
|
|
||||||
set = SetWorker.set(queue: :bar, foo: 'qaaz')
|
|
||||||
set.perform_async(1)
|
|
||||||
set.perform_async(1)
|
|
||||||
set.perform_async(1)
|
|
||||||
set.perform_async(1)
|
|
||||||
assert_equal 4, q.size
|
|
||||||
assert_equal 4, q.map{|j| j['jid'] }.uniq.size
|
|
||||||
set.perform_in(10, 1)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'allows option overrides' do
|
|
||||||
q = Sidekiq::Queue.new('bar')
|
|
||||||
assert_equal 0, q.size
|
|
||||||
assert SetWorker.set(queue: :bar).perform_async(1)
|
|
||||||
job = q.first
|
|
||||||
assert_equal 'bar', job['queue']
|
|
||||||
assert_equal 12, job['retry']
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'handles symbols and strings' do
|
|
||||||
q = Sidekiq::Queue.new('bar')
|
|
||||||
assert_equal 0, q.size
|
|
||||||
assert SetWorker.set('queue' => 'bar', :retry => 11).perform_async(1)
|
|
||||||
job = q.first
|
|
||||||
assert_equal 'bar', job['queue']
|
|
||||||
assert_equal 11, job['retry']
|
|
||||||
|
|
||||||
q.clear
|
|
||||||
assert SetWorker.perform_async(1)
|
|
||||||
assert_equal 0, q.size
|
|
||||||
|
|
||||||
q = Sidekiq::Queue.new('foo')
|
|
||||||
job = q.first
|
|
||||||
assert_equal 'foo', job['queue']
|
|
||||||
assert_equal 12, job['retry']
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'class attribute race conditions' do
|
describe 'class attribute race conditions' do
|
||||||
new_class = -> {
|
new_class = -> {
|
||||||
Class.new do
|
Class.new do
|
||||||
|
|
64
test/test_worker.rb
Normal file
64
test/test_worker.rb
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
require_relative 'helper'
|
||||||
|
|
||||||
|
describe Sidekiq::Worker do
|
||||||
|
describe '#set' do
|
||||||
|
|
||||||
|
class SetWorker
|
||||||
|
include Sidekiq::Worker
|
||||||
|
sidekiq_options :queue => :foo, 'retry' => 12
|
||||||
|
end
|
||||||
|
|
||||||
|
def setup
|
||||||
|
Sidekiq.redis {|c| c.flushdb }
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'can be memoized' do
|
||||||
|
q = Sidekiq::Queue.new('bar')
|
||||||
|
assert_equal 0, q.size
|
||||||
|
set = SetWorker.set(queue: :bar, foo: 'qaaz')
|
||||||
|
set.perform_async(1)
|
||||||
|
set.perform_async(1)
|
||||||
|
set.perform_async(1)
|
||||||
|
set.perform_async(1)
|
||||||
|
assert_equal 4, q.size
|
||||||
|
assert_equal 4, q.map{|j| j['jid'] }.uniq.size
|
||||||
|
set.perform_in(10, 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'allows option overrides' do
|
||||||
|
q = Sidekiq::Queue.new('bar')
|
||||||
|
assert_equal 0, q.size
|
||||||
|
assert SetWorker.set(queue: :bar).perform_async(1)
|
||||||
|
job = q.first
|
||||||
|
assert_equal 'bar', job['queue']
|
||||||
|
assert_equal 12, job['retry']
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'handles symbols and strings' do
|
||||||
|
q = Sidekiq::Queue.new('bar')
|
||||||
|
assert_equal 0, q.size
|
||||||
|
assert SetWorker.set('queue' => 'bar', :retry => 11).perform_async(1)
|
||||||
|
job = q.first
|
||||||
|
assert_equal 'bar', job['queue']
|
||||||
|
assert_equal 11, job['retry']
|
||||||
|
|
||||||
|
q.clear
|
||||||
|
assert SetWorker.perform_async(1)
|
||||||
|
assert_equal 0, q.size
|
||||||
|
|
||||||
|
q = Sidekiq::Queue.new('foo')
|
||||||
|
job = q.first
|
||||||
|
assert_equal 'foo', job['queue']
|
||||||
|
assert_equal 12, job['retry']
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'allows multiple calls' do
|
||||||
|
SetWorker.set(queue: :foo).set(bar: 'xyz').perform_async
|
||||||
|
|
||||||
|
q = Sidekiq::Queue.new('foo')
|
||||||
|
job = q.first
|
||||||
|
assert_equal 'foo', job['queue']
|
||||||
|
assert_equal 'xyz', job['bar']
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Add table
Reference in a new issue