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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 33c2701432b5817f7d743b3da80a87085a6c2e3f
|
4
|
+
data.tar.gz: 8855bbb6c15a477b9f13b0154ea2fed624a75804
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9851d19fc215bf77b2653980ef1a72bc93fc728bf6cdadf018c8b5aeebf310af0477d7cab6fbd8776c42cd344cc4049fe590ba385e77becd0b5fa1de30c0314f
|
7
|
+
data.tar.gz: c9135baadd95a6998d6a2ed71d096630599632d5b6dc43cdc4fa8d310bf90fb0e13760e047e4ce0452235e4a8ff2c3e7c4212b16a94f715c3c9c14065f243728
|
data/lib/sidekiq/schedulable.rb
CHANGED
@@ -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
|
6
|
+
return if schedule[:crons].empty?
|
7
7
|
|
8
8
|
worker = schedule[:worker]
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
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
|
|
@@ -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
|
-
|
53
|
+
crons: ['*/10 * * * * *'],
|
40
54
|
options: {}
|
41
55
|
},
|
42
56
|
'AnotherWorker' => {
|
43
57
|
worker: AnotherWorker,
|
44
|
-
|
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[:
|
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'][:
|
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.
|
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:
|
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.
|
108
|
+
rubygems_version: 2.5.1
|
109
109
|
signing_key:
|
110
110
|
specification_version: 4
|
111
111
|
summary: Scheduled Sidekiq jobs
|