sidekiq_schedulable 0.1.0 → 0.1.1

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: b63956db669f074615f6bcf3b1ba88572005eded
4
- data.tar.gz: a3416899d49afcb426bf8286f0730ef5ce307167
3
+ metadata.gz: 33c2701432b5817f7d743b3da80a87085a6c2e3f
4
+ data.tar.gz: 8855bbb6c15a477b9f13b0154ea2fed624a75804
5
5
  SHA512:
6
- metadata.gz: 849c6f5ea0aaabbca8f3b22835f83517ba9cef3f11beac749bc97a4344efac9143fa129785f775e78fdd514211ffd4519578898e9518e637de7568b1cc399a4c
7
- data.tar.gz: 5e4fea3129c64b92cda1b5641fea9c1eb451e0c97d9c3902060a7833fb578d960e6bcad5e822dbfaebf8fa123652f8759936af0c0f70b22c7071f2c6db7dc447
6
+ metadata.gz: 9851d19fc215bf77b2653980ef1a72bc93fc728bf6cdadf018c8b5aeebf310af0477d7cab6fbd8776c42cd344cc4049fe590ba385e77becd0b5fa1de30c0314f
7
+ data.tar.gz: c9135baadd95a6998d6a2ed71d096630599632d5b6dc43cdc4fa8d310bf90fb0e13760e047e4ce0452235e4a8ff2c3e7c4212b16a94f715c3c9c14065f243728
@@ -8,7 +8,7 @@ module Sidekiq
8
8
  def sidekiq_schedule(schedule, options = {})
9
9
  SidekiqSchedulable.schedules[self.to_s] = {
10
10
  worker: self,
11
- cron: schedule,
11
+ crons: Array(schedule),
12
12
  options: options
13
13
  }
14
14
  end
@@ -3,15 +3,17 @@ require 'parse-cron'
3
3
  module SidekiqSchedulable
4
4
  module Schedule
5
5
  def self.enqueue(schedule, last_run = nil)
6
- return unless schedule[:cron]
6
+ return if schedule[:crons].empty?
7
7
 
8
8
  worker = schedule[:worker]
9
- time = next_time(schedule[:cron])
10
- if schedule[:options][:last_run]
11
- last_time = last_run || last_time(schedule[:cron])
12
- worker.perform_at(time, last_time.to_f)
13
- else
14
- worker.perform_at(time)
9
+ schedule[:crons].each do |cron|
10
+ time = next_time(cron)
11
+ if schedule[:options][:last_run]
12
+ last_time = last_run || last_time(cron)
13
+ worker.perform_at(time, last_time.to_f)
14
+ else
15
+ worker.perform_at(time)
16
+ end
15
17
  end
16
18
  end
17
19
 
@@ -1,3 +1,3 @@
1
1
  module SidekiqSchedulable
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
@@ -29,20 +29,39 @@ describe SidekiqSchedulable do
29
29
  end
30
30
  end
31
31
 
32
+ class MultipleSchedulesWorker
33
+ include Sidekiq::Worker
34
+ include Sidekiq::Schedulable
35
+
36
+ sidekiq_schedule ['0 */2 * * * *', '0 */3 * * * *', '0 */5 * * * *']
37
+
38
+ def perform
39
+ :nothing
40
+ end
41
+ end
42
+
32
43
  let(:midnight) { Time.new(2015, 10, 1, 0, 0, 0) }
33
44
  let(:next_ten_minutes) { midnight + 10 * 60 }
45
+ let(:next_five_minutes) { midnight + 5 * 60 }
46
+ let(:next_three_minutes) { midnight + 3 * 60 }
47
+ let(:next_two_minutes) { midnight + 2 * 60 }
34
48
 
35
49
  let(:schedules) {
36
50
  {
37
51
  'TestWorker' => {
38
52
  worker: TestWorker,
39
- cron: '*/10 * * * * *',
53
+ crons: ['*/10 * * * * *'],
40
54
  options: {}
41
55
  },
42
56
  'AnotherWorker' => {
43
57
  worker: AnotherWorker,
44
- cron: '0 12 * * * *',
58
+ crons: ['0 12 * * * *'],
45
59
  options: { last_run: true }
60
+ },
61
+ 'MultipleSchedulesWorker' => {
62
+ worker: MultipleSchedulesWorker,
63
+ crons: ['*/2 * * * * *', '*/3 * * * * *', '*/5 * * * * *'],
64
+ options: {}
46
65
  }
47
66
  }
48
67
  }
@@ -58,7 +77,7 @@ describe SidekiqSchedulable do
58
77
  it "adds the schedule to the schedules" do
59
78
  schedule = SidekiqSchedulable.schedules['TestWorker']
60
79
 
61
- expect(schedule[:cron]).to eq('*/10 * * * * *')
80
+ expect(schedule[:crons]).to eq(['*/10 * * * * *'])
62
81
  expect(schedule[:worker]).to eq(TestWorker)
63
82
  expect(schedule[:options]).to eq({})
64
83
  end
@@ -155,11 +174,18 @@ describe SidekiqSchedulable do
155
174
  end
156
175
 
157
176
  it "does not enqueue a job with no schedule" do
158
- schedules['TestWorker'][:cron] = nil
177
+ schedules['TestWorker'][:crons] = []
159
178
 
160
179
  SidekiqSchedulable::Startup.new(schedules, current_jobs).schedule!
161
180
 
162
181
  expect(TestWorker.jobs.size).to eq(0)
163
182
  end
183
+
184
+ it "creates multiple jobs for multiple schedules" do
185
+ SidekiqSchedulable::Startup.new(schedules, current_jobs).schedule!
186
+
187
+ expect(MultipleSchedulesWorker.jobs.size).to eq(3)
188
+ expect([next_two_minutes.to_f, next_three_minutes.to_f, next_five_minutes.to_f]).to eq(MultipleSchedulesWorker.jobs.map{ |j| j['at'] })
189
+ end
164
190
  end
165
191
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq_schedulable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Buchanan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-29 00:00:00.000000000 Z
11
+ date: 2016-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sidekiq
@@ -105,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
105
  version: '0'
106
106
  requirements: []
107
107
  rubyforge_project:
108
- rubygems_version: 2.2.3
108
+ rubygems_version: 2.5.1
109
109
  signing_key:
110
110
  specification_version: 4
111
111
  summary: Scheduled Sidekiq jobs