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