rekiq 0.8.1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 482599a4667b43c5690d7a4232e0ae3d87f2c4fd
4
- data.tar.gz: 9964d52d551ed769dada46c3ab8427f77465c8ff
3
+ metadata.gz: 1d548839b06922aae376dd135b36f42129b5e05e
4
+ data.tar.gz: 878fdd5c73c1943c47727071040194a310c82d83
5
5
  SHA512:
6
- metadata.gz: 34104c582240196d8effd91b0ea5ae48f9d43beb0e7fba9ba5fe8db2e93b17f4269488a947967f5f0f7ebb8d3bf43801e5239db29d8e1ff2ee8033b73e6b0132
7
- data.tar.gz: 71f5c7c77a0934bea52bfba4f0913e3ef86260b1ba657e0cf28cce45d29b9e8933ca1803b29768f36422e497436e5b83bd8bb2525fa85438feea242e15c2b3f2
6
+ metadata.gz: ae761311a5dc7ce345d52e4c357d8cd0585e555fbb07b927873e8552c1955791ff7df0ed529155024bb1b8f448728bb78b2971d11a745decb00191326c7abef0
7
+ data.tar.gz: c801e761d166e54589d8a5120850b1ba5ce3479e2e2cda5b75283e73469d27b1ee8c4b2201ae9bdd8b46d1c5410cdaf1c3ec7660f22fbbcc8c3eea668b73b0d7
data/example/test_app.rb CHANGED
@@ -4,17 +4,24 @@
4
4
  require 'ice_cube'
5
5
  require 'sidekiq'
6
6
  require 'rekiq'
7
+ require 'pry'
7
8
 
8
9
  # define sidekiq worker as you normally would
9
10
  class TestWorker1
10
11
  include Sidekiq::Worker
11
12
 
12
- sidekiq_options queue: "rekiq_test_worker", retry: 3
13
+ sidekiq_options queue: "rekiq_test_worker",
14
+ retry: 3,
15
+ rekiq_cancel_method: :cancel
13
16
 
14
17
  def perform(arg1, arg2)
15
- puts "\n\nhello from TestWorker1, arg1 is #{arg1}, arg2 is #{arg2}" \
18
+ puts "\nhello from TestWorker1, arg1 is #{arg1}, arg2 is #{arg2} " \
16
19
  "scheduled work time was #{scheduled_work_time}\n\n"
17
20
  end
21
+
22
+ def cancel(arg1)
23
+ puts "\ncancel method invoked with arg #{arg1}\n\n"
24
+ end
18
25
  end
19
26
 
20
27
  # create ice cube schedule
@@ -24,7 +31,9 @@ schedule = IceCube::Schedule.new(Time.now) do |s|
24
31
 
25
32
  # invoke method
26
33
  TestWorker1.perform_recurringly(
27
- schedule,
28
- ['Rekiq', 'ola', '!!!'],
29
- { 'complex' => { 'hash' => 'woot!' } }
30
- )
34
+ schedule,
35
+ ['Rekiq', 'ola', '!!!'],
36
+ { 'complex' => { 'hash' => 'woot!' } }
37
+ ) do |config|
38
+ config.rekiq_cancel_args 1
39
+ end
@@ -2,5 +2,6 @@ module Rekiq
2
2
  class StandardError < ::StandardError; end
3
3
  class SidekiqNotLoaded < StandardError; end
4
4
  class InvalidAttributeValue < StandardError; end
5
- class CancellerMethodMissing < StandardError; end
5
+ class CancelMethodMissing < StandardError; end
6
+ class CancelMethodInvocationError < StandardError; end
6
7
  end
@@ -13,9 +13,8 @@ module Rekiq
13
13
 
14
14
  setup_vars(worker, msg, queue)
15
15
 
16
- if !@canceller_name.nil? and
17
- worker.send(@canceller_name, *@canceller_args)
18
- return logger.info 'worker canceled by recurrence canceller'
16
+ if cancel_worker?
17
+ return logger.info 'worker canceled by rekiq cancel method'
19
18
  end
20
19
 
21
20
  return yield unless msg.key?('rq:schdlr')
@@ -33,8 +32,9 @@ module Rekiq
33
32
  protected
34
33
 
35
34
  def setup_vars(worker, msg, queue)
36
- @canceller_name = worker.recurrence_canceller_name
37
- @canceller_args = msg['rq:ca']
35
+ @cancel_method = worker.rekiq_cancel_method
36
+ @cancel_args = msg['rq:ca']
37
+ @worker = worker
38
38
  @worker_name = worker.class.name
39
39
  @queue = queue
40
40
  @args = msg['args']
@@ -43,10 +43,19 @@ module Rekiq
43
43
  @scheduled_work_time = Time.at(msg['rq:at'].to_f)
44
44
  end
45
45
 
46
+ def cancel_worker?
47
+ !@cancel_method.nil? and @worker.send(@cancel_method, *@cancel_args)
48
+ rescue StandardError => s
49
+ raise CancelMethodInvocationError,
50
+ "error while invoking rekiq_cancel_method with message " \
51
+ "#{s.message}",
52
+ s.backtrace
53
+ end
54
+
46
55
  def reschedule
47
56
  jid, work_time =
48
57
  Rekiq::Scheduler
49
- .new(@worker_name, @queue, @args, @job, @addon, @canceller_args)
58
+ .new(@worker_name, @queue, @args, @job, @addon, @cancel_args)
50
59
  .schedule_from_work_time(@scheduled_work_time)
51
60
 
52
61
  unless jid.nil?
@@ -1,12 +1,12 @@
1
1
  module Rekiq
2
2
  class Scheduler
3
- def initialize(worker_name, queue, args, job, addon, canceller_args)
3
+ def initialize(worker_name, queue, args, job, addon, cancel_args)
4
4
  @worker_name = worker_name
5
5
  @queue = queue
6
6
  @args = args
7
7
  @job = job
8
8
  @addon = addon
9
- @canceller_args = canceller_args
9
+ @cancel_args = cancel_args
10
10
  end
11
11
 
12
12
  def schedule(from = Time.now)
@@ -34,7 +34,7 @@ module Rekiq
34
34
  'rq:schdlr' => nil
35
35
  }.tap do |hash|
36
36
  hash['rq:addon'] = @addon unless @addon.nil?
37
- hash['rq:ca'] = @canceller_args unless @canceller_args.nil?
37
+ hash['rq:ca'] = @cancel_args unless @cancel_args.nil?
38
38
  end
39
39
 
40
40
  Sidekiq::Client.push(client_args)
data/lib/rekiq/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rekiq
2
- VERSION = "0.8.1"
2
+ VERSION = "0.9.0"
3
3
  end
data/lib/rekiq/worker.rb CHANGED
@@ -6,10 +6,10 @@ module Rekiq
6
6
  module Worker
7
7
  class Configuration
8
8
  attr_accessor :shift, :schedule_post_work, :schedule_expired,
9
- :expiration_margin, :addon, :recurrence_canceller_args
9
+ :expiration_margin, :addon, :cancel_args
10
10
 
11
- def recurrence_canceller_args(*args)
12
- self.recurrence_canceller_args = args
11
+ def rekiq_cancel_args(*args)
12
+ @cancel_args = args
13
13
  end
14
14
  end
15
15
 
@@ -34,7 +34,7 @@ module Rekiq
34
34
 
35
35
  jid, work_time =
36
36
  Rekiq::Scheduler
37
- .new(name, queue, args, job, @config.addon, @config.recurrence_canceller_args)
37
+ .new(name, queue, args, job, @config.addon, @config.cancel_args)
38
38
  .schedule
39
39
 
40
40
  if jid.nil?
@@ -46,18 +46,18 @@ module Rekiq
46
46
  jid
47
47
  end
48
48
 
49
- def recurrence_canceller_name
50
- get_sidekiq_options['recurrence_canceller_name']
49
+ def rekiq_cancel_method
50
+ get_sidekiq_options['rekiq_cancel_method']
51
51
  end
52
52
 
53
53
  protected
54
54
 
55
55
  def validate!
56
- unless recurrence_canceller_name.nil? or
57
- self.method_defined?(recurrence_canceller_name)
58
- raise CancellerMethodMissing,
59
- 'recurrence canceller method name defined as ' \
60
- "#{recurrence_canceller_name}, but worker does not have " \
56
+ unless rekiq_cancel_method.nil? or
57
+ self.method_defined?(rekiq_cancel_method)
58
+ raise CancelMethodMissing,
59
+ 'rekiq cancel method name defined as ' \
60
+ "#{rekiq_cancel_method}, but worker does not have " \
61
61
  'a method with that name, either remove definition or define ' \
62
62
  'missing method'
63
63
  end
@@ -77,8 +77,8 @@ module Sidekiq
77
77
  base.extend(Rekiq::Worker::ClassMethods)
78
78
  end
79
79
 
80
- def recurrence_canceller_name
81
- self.class.recurrence_canceller_name
80
+ def rekiq_cancel_method
81
+ self.class.rekiq_cancel_method
82
82
  end
83
83
  end
84
84
  end
data/rekiq.gemspec CHANGED
@@ -9,9 +9,8 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["junhanamaki"]
10
10
  spec.email = ["jun.hanamaki@gmail.com"]
11
11
  spec.summary = %q{Recurring worker extension for Sidekiq}
12
- spec.description = %q{Rekiq extends Sidekiq so that we can schedule
13
- recurring workers, check homepage for
14
- more details.}
12
+ spec.description = %q{Rekiq extends Sidekiq to allow the scheduling of
13
+ recurring workers}
15
14
  spec.homepage = "https://github.com/junhanamaki/rekiq"
16
15
  spec.license = "MIT"
17
16
 
@@ -25,7 +24,7 @@ Gem::Specification.new do |spec|
25
24
  spec.add_development_dependency 'bundler', '~> 1.6'
26
25
  spec.add_development_dependency 'rspec', '~> 3.0'
27
26
  spec.add_development_dependency 'simplecov', '~> 0.9'
28
- spec.add_development_dependency 'codeclimate-test-reporter', '~> 0.3'
27
+ spec.add_development_dependency 'codeclimate-test-reporter', '~> 0.4'
29
28
  spec.add_development_dependency 'factory_girl', '~> 4.4'
30
29
  spec.add_development_dependency 'jazz_hands', '~> 0.5'
31
30
  spec.add_development_dependency 'ice_cube', '~> 0.12'
@@ -11,7 +11,7 @@ describe Rekiq::Middleware::WorkOverseer do
11
11
  include Sidekiq::Worker
12
12
 
13
13
  sidekiq_options queue: 'work_overseer_test_worker',
14
- recurrence_canceller_name: :cancel
14
+ rekiq_cancel_method: :cancel
15
15
 
16
16
  def cancel(bool)
17
17
  bool
@@ -24,7 +24,7 @@ describe Rekiq::Middleware::WorkOverseer do
24
24
  let(:job) { build(:job, schedule: schedule) }
25
25
  let(:overseer) { Rekiq::Middleware::WorkOverseer.new }
26
26
 
27
- context 'worker does not have recurrence_canceller_name set' do
27
+ context 'worker does not have rekiq_cancel_method set' do
28
28
  let(:worker) { WorkOverseerTestWorker.new }
29
29
  let(:queue) { WorkOverseerTestWorker.get_sidekiq_options['queue'] }
30
30
 
@@ -80,7 +80,7 @@ describe Rekiq::Middleware::WorkOverseer do
80
80
  end
81
81
  end
82
82
 
83
- context 'worker has recurrence_canceller_name method set' do
83
+ context 'worker has rekiq_cancel_method method set' do
84
84
  let(:worker) { WorkOverseerCancelTestWorker.new }
85
85
  let(:queue) { WorkOverseerCancelTestWorker.get_sidekiq_options['queue'] }
86
86
 
@@ -95,7 +95,7 @@ describe Rekiq::Middleware::WorkOverseer do
95
95
  end.not_to yield_control
96
96
  end
97
97
 
98
- it 'does not scheduler worker' do
98
+ it 'does not schedule worker' do
99
99
  expect(WorkOverseerCancelTestWorker.jobs.count).to eq(0)
100
100
  end
101
101
  end
@@ -105,11 +105,27 @@ describe Rekiq::Middleware::WorkOverseer do
105
105
  { 'rq:job' => job.to_array, 'args' => args, 'rq:ca' => false }
106
106
  end
107
107
 
108
- it 'does yield' do
108
+ it 'yields given block' do
109
109
  expect do |b|
110
110
  overseer.call(worker, msg, queue, &b)
111
111
  end.to yield_control.once
112
112
  end
113
+
114
+ it 'does not schedule worker' do
115
+ expect(WorkOverseerCancelTestWorker.jobs.count).to eq(0)
116
+ end
117
+ end
118
+
119
+ context 'msg with rq:ca key with different arity from cancel method' do
120
+ let(:msg) do
121
+ { 'rq:job' => job.to_array, 'args' => args, 'rq:ca' => [true, true] }
122
+ end
123
+
124
+ it 'raises error' do
125
+ expect do |b|
126
+ overseer.call(worker, msg, queue, &b)
127
+ end.to raise_error
128
+ end
113
129
  end
114
130
  end
115
131
  end
@@ -46,7 +46,7 @@ describe Rekiq::Scheduler do
46
46
  end
47
47
  end
48
48
 
49
- context 'given nil as canceller_args' do
49
+ context 'given nil as rekiq_cancel_args' do
50
50
  it 'creates sidekiq job' do
51
51
  expect(SchedulerTestWorker.jobs.count).to eq(1)
52
52
  end
@@ -56,7 +56,7 @@ describe Rekiq::Scheduler do
56
56
  end
57
57
  end
58
58
 
59
- context 'given non empty array as canceller_args' do
59
+ context 'given non empty array as rekiq_cancel_args' do
60
60
  let(:c_args) { [1, 2, 3] }
61
61
 
62
62
  it 'creates sidekiq job' do
@@ -7,20 +7,20 @@ describe Rekiq::Worker do
7
7
  include Sidekiq::Worker
8
8
  end
9
9
 
10
- class CancellerUndefinedExampleWorker
10
+ class RekiqCancelMethodUndefinedExampleWorker
11
11
  include Sidekiq::Worker
12
- sidekiq_options recurrence_canceller_name: :cancel
12
+ sidekiq_options rekiq_cancel_method: :cancel
13
13
  end
14
14
 
15
- class CancellerDefinedExampleWorker
15
+ class RekiqCancelMethodDefinedExampleWorker
16
16
  include Sidekiq::Worker
17
- sidekiq_options recurrence_canceller_name: :cancel
17
+ sidekiq_options rekiq_cancel_method: :cancel
18
18
 
19
19
  def cancel
20
20
  end
21
21
  end
22
22
 
23
- context 'Class includes Sidekiq::Worker module' do
23
+ context 'class includes Sidekiq::Worker module' do
24
24
  it 'responds to perform_recurringly' do
25
25
  ExampleWorker.respond_to? :perform_recurringly
26
26
  end
@@ -45,36 +45,36 @@ describe Rekiq::Worker do
45
45
  let(:time) { Time.now + 3600 }
46
46
  let(:schedule) { IceCube::Schedule.new(time) }
47
47
 
48
- context 'for worker with recurrence_canceller_name set with ' \
48
+ context 'for worker with rekiq_cancel_method set with ' \
49
49
  'non defined method' do
50
50
  before do
51
51
  begin
52
52
  @jid =
53
- CancellerUndefinedExampleWorker.perform_recurringly(schedule)
53
+ RekiqCancelMethodUndefinedExampleWorker.perform_recurringly(schedule)
54
54
  rescue
55
55
  end
56
56
  end
57
57
 
58
58
  it 'raises error' do
59
59
  expect do
60
- CancellerUndefinedExampleWorker.perform_recurringly(schedule)
60
+ RekiqCancelMethodUndefinedExampleWorker.perform_recurringly(schedule)
61
61
  end.to raise_error
62
62
  end
63
63
 
64
64
  it 'does not schedule worker' do
65
- expect(CancellerUndefinedExampleWorker.jobs.count).to eq(0)
65
+ expect(RekiqCancelMethodUndefinedExampleWorker.jobs.count).to eq(0)
66
66
  end
67
67
  end
68
68
 
69
- context 'for worker with recurrence_canceller_name set with ' \
69
+ context 'for worker with rekiq_cancel_method set with ' \
70
70
  'defined method' do
71
71
  before do
72
- @jid = CancellerDefinedExampleWorker.perform_recurringly(schedule)
72
+ @jid = RekiqCancelMethodDefinedExampleWorker.perform_recurringly(schedule)
73
73
  end
74
74
 
75
75
  it 'does not raise error' do
76
76
  expect do
77
- CancellerDefinedExampleWorker.perform_recurringly(schedule)
77
+ RekiqCancelMethodDefinedExampleWorker.perform_recurringly(schedule)
78
78
  end.not_to raise_error
79
79
  end
80
80
 
@@ -83,11 +83,11 @@ describe Rekiq::Worker do
83
83
  end
84
84
 
85
85
  it 'schedules worker' do
86
- expect(CancellerDefinedExampleWorker.jobs.count).to eq(1)
86
+ expect(RekiqCancelMethodDefinedExampleWorker.jobs.count).to eq(1)
87
87
  end
88
88
 
89
89
  it 'schedules worker for one hour from now' do
90
- expect(CancellerDefinedExampleWorker.jobs[0]['at']).to eq(time.to_f)
90
+ expect(RekiqCancelMethodDefinedExampleWorker.jobs[0]['at']).to eq(time.to_f)
91
91
  end
92
92
  end
93
93
 
@@ -109,8 +109,55 @@ describe Rekiq::Worker do
109
109
  end
110
110
  end
111
111
 
112
+ context 'rekiq_cancel_args with 2 arguments' do
113
+ let(:rekiq_cancel_args) { ['args1', 'args2'] }
114
+ before do
115
+ @jid = ExampleWorker.perform_recurringly(schedule) do |config|
116
+ config.rekiq_cancel_args *rekiq_cancel_args
117
+ end
118
+ end
119
+
120
+ it 'returns created job id' do
121
+ expect(@jid).not_to be_nil
122
+ end
123
+
124
+ it 'schedules worker' do
125
+ expect(ExampleWorker.jobs.count).to eq(1)
126
+ end
127
+
128
+ it 'yields once if block given' do
129
+ expect do |b|
130
+ ExampleWorker.perform_recurringly(schedule, &b)
131
+ end.to yield_control.once
132
+ end
133
+
134
+ it 'creates key rq:ca in job hash' do
135
+ expect(ExampleWorker.jobs[0].key?('rq:ca')).to eq(true)
136
+ end
137
+
138
+ describe 'value under rq:ca key in job hash' do
139
+ let(:value) { ExampleWorker.jobs[0]['rq:ca'] }
140
+
141
+ it 'is an array' do
142
+ expect(value.class).to eq(Array)
143
+ end
144
+
145
+ it 'has count equal to number of rekiq_cancel_args' do
146
+ expect(value.count).to eq(rekiq_cancel_args.count)
147
+ end
148
+
149
+ it 'has first element equal to first arg in rekiq_cancel_args' do
150
+ expect(value[0]).to eq(rekiq_cancel_args[0])
151
+ end
152
+
153
+ it 'has second element equal to second arg in rekiq_cancel_args' do
154
+ expect(value[1]).to eq(rekiq_cancel_args[1])
155
+ end
156
+ end
157
+ end
158
+
112
159
  context 'shift set to minus 5 minutes' do
113
- let(:shift) { -5 * 60 }
160
+ let(:shift) { -5 * 60 }
114
161
  before do
115
162
  @jid = ExampleWorker.perform_recurringly(schedule) do |config|
116
163
  config.shift = shift
@@ -125,13 +172,13 @@ describe Rekiq::Worker do
125
172
  expect(ExampleWorker.jobs.count).to eq(1)
126
173
  end
127
174
 
128
- it 'yields once' do
175
+ it 'yields once if block given' do
129
176
  expect do |b|
130
177
  ExampleWorker.perform_recurringly(schedule, &b)
131
178
  end.to yield_control.once
132
179
  end
133
180
 
134
- it 'sets shift in rq:job' do
181
+ it 'sets shift in position 1 of array under key rq:job' do
135
182
  array = ExampleWorker.jobs[0]['rq:job']
136
183
 
137
184
  expect(array[1]).to eq(shift)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rekiq
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - junhanamaki
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-01 00:00:00.000000000 Z
11
+ date: 2014-08-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0.3'
61
+ version: '0.4'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0.3'
68
+ version: '0.4'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: factory_girl
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -123,9 +123,8 @@ dependencies:
123
123
  - !ruby/object:Gem::Version
124
124
  version: '3.2'
125
125
  description: |-
126
- Rekiq extends Sidekiq so that we can schedule
127
- recurring workers, check homepage for
128
- more details.
126
+ Rekiq extends Sidekiq to allow the scheduling of
127
+ recurring workers
129
128
  email:
130
129
  - jun.hanamaki@gmail.com
131
130
  executables: []