sidekiq_schedulable 0.1.0 → 0.1.1

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
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