rufus-scheduler 3.0.8 → 3.2.0
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.
- data/CHANGELOG.txt +75 -0
- data/CREDITS.txt +21 -0
- data/LICENSE.txt +1 -1
- data/README.md +120 -15
- data/lib/rufus/scheduler/cronline.rb +107 -100
- data/lib/rufus/scheduler/job_array.rb +2 -1
- data/lib/rufus/scheduler/jobs.rb +53 -41
- data/lib/rufus/scheduler/locks.rb +95 -0
- data/lib/rufus/scheduler/util.rb +8 -33
- data/lib/rufus/scheduler/zones.rb +175 -0
- data/lib/rufus/scheduler/zotime.rb +167 -0
- data/lib/rufus/scheduler.rb +67 -67
- data/rufus-scheduler.gemspec +3 -28
- metadata +22 -47
- data/spec/basics_spec.rb +0 -49
- data/spec/cronline_spec.rb +0 -681
- data/spec/custom_locks_spec.rb +0 -47
- data/spec/error_spec.rb +0 -139
- data/spec/job_array_spec.rb +0 -39
- data/spec/job_at_spec.rb +0 -58
- data/spec/job_cron_spec.rb +0 -106
- data/spec/job_every_spec.rb +0 -90
- data/spec/job_in_spec.rb +0 -20
- data/spec/job_interval_spec.rb +0 -68
- data/spec/job_repeat_spec.rb +0 -356
- data/spec/job_spec.rb +0 -631
- data/spec/lockfile_spec.rb +0 -61
- data/spec/parse_spec.rb +0 -261
- data/spec/schedule_at_spec.rb +0 -158
- data/spec/schedule_cron_spec.rb +0 -66
- data/spec/schedule_every_spec.rb +0 -109
- data/spec/schedule_in_spec.rb +0 -80
- data/spec/schedule_interval_spec.rb +0 -128
- data/spec/scheduler_spec.rb +0 -1049
- data/spec/spec_helper.rb +0 -126
- data/spec/threads_spec.rb +0 -96
data/spec/parse_spec.rb
DELETED
|
@@ -1,261 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
#
|
|
3
|
-
# Specifying rufus-scheduler
|
|
4
|
-
#
|
|
5
|
-
# Wed Apr 17 06:00:59 JST 2013
|
|
6
|
-
#
|
|
7
|
-
|
|
8
|
-
require 'spec_helper'
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
describe Rufus::Scheduler do
|
|
12
|
-
|
|
13
|
-
describe '.parse' do
|
|
14
|
-
|
|
15
|
-
def parse(s, opts={})
|
|
16
|
-
Rufus::Scheduler.parse(s, opts)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
it 'parses duration strings' do
|
|
20
|
-
|
|
21
|
-
expect(parse('1.0d1.0w1.0d')).to eq(777600.0)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it 'parses datetimes' do
|
|
25
|
-
|
|
26
|
-
# local
|
|
27
|
-
|
|
28
|
-
expect(parse('Sun Nov 18 16:01:00 2012').strftime('%c')).to eq(
|
|
29
|
-
'Sun Nov 18 16:01:00 2012'
|
|
30
|
-
)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it 'parses datetimes with timezones' do
|
|
34
|
-
|
|
35
|
-
expect(parse('Sun Nov 18 16:01:00 2012 Japan').getutc.strftime('%c')).to eq(
|
|
36
|
-
'Sun Nov 18 07:01:00 2012'
|
|
37
|
-
)
|
|
38
|
-
|
|
39
|
-
expect(parse('Sun Nov 18 16:01:00 2012 Zulu').getutc.strftime('%c')).to eq(
|
|
40
|
-
'Sun Nov 18 16:01:00 2012'
|
|
41
|
-
)
|
|
42
|
-
|
|
43
|
-
expect(parse('Sun Nov 18 16:01:00 Japan 2012').getutc.strftime('%c')).to eq(
|
|
44
|
-
'Sun Nov 18 07:01:00 2012'
|
|
45
|
-
)
|
|
46
|
-
|
|
47
|
-
expect(parse('Japan Sun Nov 18 16:01:00 2012').getutc.strftime('%c')).to eq(
|
|
48
|
-
'Sun Nov 18 07:01:00 2012'
|
|
49
|
-
)
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it 'parses datetimes with named timezones' do
|
|
53
|
-
|
|
54
|
-
expect(parse(
|
|
55
|
-
'Sun Nov 18 16:01:00 2012 Europe/Berlin'
|
|
56
|
-
).strftime('%c %z')).to eq(
|
|
57
|
-
'Sun Nov 18 15:01:00 2012 +0000'
|
|
58
|
-
)
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
it 'parses datetimes (with the local timezone implicitely)' do
|
|
62
|
-
|
|
63
|
-
localzone = Time.now.strftime('%z')
|
|
64
|
-
|
|
65
|
-
expect(parse('Sun Nov 18 16:01:00 2012').strftime('%c %z')).to eq(
|
|
66
|
-
"Sun Nov 18 16:01:00 2012 #{localzone}"
|
|
67
|
-
)
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
it 'parses cronlines' do
|
|
71
|
-
|
|
72
|
-
out = parse('* * * * *')
|
|
73
|
-
|
|
74
|
-
expect(out.class).to eq(Rufus::Scheduler::CronLine)
|
|
75
|
-
expect(out.original).to eq('* * * * *')
|
|
76
|
-
|
|
77
|
-
expect(parse('10 23 * * *').class).to eq(Rufus::Scheduler::CronLine)
|
|
78
|
-
expect(parse('* 23 * * *').class).to eq(Rufus::Scheduler::CronLine)
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
it 'raises on unparseable input' do
|
|
82
|
-
|
|
83
|
-
expect {
|
|
84
|
-
parse('nada')
|
|
85
|
-
}.to raise_error(ArgumentError, 'couldn\'t parse "nada"')
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
it 'does not use Chronic if not present' do
|
|
89
|
-
|
|
90
|
-
t = parse('next monday 7 PM')
|
|
91
|
-
|
|
92
|
-
n = Time.now
|
|
93
|
-
|
|
94
|
-
expect(t.strftime('%Y-%m-%d %H:%M:%S')).to eq(
|
|
95
|
-
n.strftime('%Y-%m-%d') + ' 19:00:00'
|
|
96
|
-
)
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
it 'uses Chronic if present' do
|
|
100
|
-
|
|
101
|
-
with_chronic do
|
|
102
|
-
|
|
103
|
-
t = parse('next monday 7 PM')
|
|
104
|
-
|
|
105
|
-
expect(t.wday).to eq(1)
|
|
106
|
-
expect(t.hour).to eq(19)
|
|
107
|
-
expect(t.min).to eq(0)
|
|
108
|
-
expect(t).to be > Time.now
|
|
109
|
-
end
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
it 'passes options to Chronic' do
|
|
113
|
-
|
|
114
|
-
with_chronic do
|
|
115
|
-
|
|
116
|
-
t = parse('monday', :context => :past)
|
|
117
|
-
|
|
118
|
-
expect(t.wday).to eq(1)
|
|
119
|
-
expect(t).to be < Time.now
|
|
120
|
-
end
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
describe '.parse_duration' do
|
|
125
|
-
|
|
126
|
-
def pd(s)
|
|
127
|
-
Rufus::Scheduler.parse_duration(s)
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
it 'parses duration strings' do
|
|
131
|
-
|
|
132
|
-
expect(pd('-1.0d1.0w1.0d')).to eq(-777600.0)
|
|
133
|
-
expect(pd('-1d1w1d')).to eq(-777600.0)
|
|
134
|
-
expect(pd('-1w2d')).to eq(-777600.0)
|
|
135
|
-
expect(pd('-1h10s')).to eq(-3610.0)
|
|
136
|
-
expect(pd('-1h')).to eq(-3600.0)
|
|
137
|
-
expect(pd('-5.')).to eq(-5.0)
|
|
138
|
-
expect(pd('-2.5s')).to eq(-2.5)
|
|
139
|
-
expect(pd('-1s')).to eq(-1.0)
|
|
140
|
-
expect(pd('-500')).to eq(-500)
|
|
141
|
-
expect(pd('')).to eq(0.0)
|
|
142
|
-
expect(pd('5.0')).to eq(5.0)
|
|
143
|
-
expect(pd('0.5')).to eq(0.5)
|
|
144
|
-
expect(pd('.5')).to eq(0.5)
|
|
145
|
-
expect(pd('5.')).to eq(5.0)
|
|
146
|
-
expect(pd('500')).to eq(500)
|
|
147
|
-
expect(pd('1000')).to eq(1000)
|
|
148
|
-
expect(pd('1')).to eq(1.0)
|
|
149
|
-
expect(pd('1s')).to eq(1.0)
|
|
150
|
-
expect(pd('2.5s')).to eq(2.5)
|
|
151
|
-
expect(pd('1h')).to eq(3600.0)
|
|
152
|
-
expect(pd('1h10s')).to eq(3610.0)
|
|
153
|
-
expect(pd('1w2d')).to eq(777600.0)
|
|
154
|
-
expect(pd('1d1w1d')).to eq(777600.0)
|
|
155
|
-
expect(pd('1.0d1.0w1.0d')).to eq(777600.0)
|
|
156
|
-
|
|
157
|
-
expect(pd('.5m')).to eq(30.0)
|
|
158
|
-
expect(pd('5.m')).to eq(300.0)
|
|
159
|
-
expect(pd('1m.5s')).to eq(60.5)
|
|
160
|
-
expect(pd('-.5m')).to eq(-30.0)
|
|
161
|
-
|
|
162
|
-
expect(pd('1')).to eq(1)
|
|
163
|
-
expect(pd('0.1')).to eq(0.1)
|
|
164
|
-
expect(pd('1s')).to eq(1)
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
it 'calls #to_s on its input' do
|
|
168
|
-
|
|
169
|
-
expect(pd(0.1)).to eq(0.1)
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
it 'raises on wrong duration strings' do
|
|
173
|
-
|
|
174
|
-
expect { pd('-') }.to raise_error(ArgumentError)
|
|
175
|
-
expect { pd('h') }.to raise_error(ArgumentError)
|
|
176
|
-
expect { pd('whatever') }.to raise_error(ArgumentError)
|
|
177
|
-
expect { pd('hms') }.to raise_error(ArgumentError)
|
|
178
|
-
|
|
179
|
-
expect { pd(' 1h ') }.to raise_error(ArgumentError)
|
|
180
|
-
end
|
|
181
|
-
end
|
|
182
|
-
|
|
183
|
-
describe '.parse_time_string -> .parse_duration' do
|
|
184
|
-
|
|
185
|
-
it 'is still around for libs using it out there' do
|
|
186
|
-
|
|
187
|
-
expect(Rufus::Scheduler.parse_time_string('1d1w1d')).to eq(777600.0)
|
|
188
|
-
end
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
describe '.parse_duration_string -> .parse_duration' do
|
|
192
|
-
|
|
193
|
-
it 'is still around for libs using it out there' do
|
|
194
|
-
|
|
195
|
-
expect(Rufus::Scheduler.parse_duration_string('1d1w1d')).to eq(777600.0)
|
|
196
|
-
end
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
describe '.to_duration' do
|
|
200
|
-
|
|
201
|
-
def td(o, opts={})
|
|
202
|
-
Rufus::Scheduler.to_duration(o, opts)
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
it 'turns integers into duration strings' do
|
|
206
|
-
|
|
207
|
-
expect(td(0)).to eq('0s')
|
|
208
|
-
expect(td(60)).to eq('1m')
|
|
209
|
-
expect(td(61)).to eq('1m1s')
|
|
210
|
-
expect(td(3661)).to eq('1h1m1s')
|
|
211
|
-
expect(td(24 * 3600)).to eq('1d')
|
|
212
|
-
expect(td(7 * 24 * 3600 + 1)).to eq('1w1s')
|
|
213
|
-
expect(td(30 * 24 * 3600 + 1)).to eq('4w2d1s')
|
|
214
|
-
end
|
|
215
|
-
|
|
216
|
-
it 'ignores seconds and milliseconds if :drop_seconds => true' do
|
|
217
|
-
|
|
218
|
-
expect(td(0, :drop_seconds => true)).to eq('0m')
|
|
219
|
-
expect(td(5, :drop_seconds => true)).to eq('0m')
|
|
220
|
-
expect(td(61, :drop_seconds => true)).to eq('1m')
|
|
221
|
-
end
|
|
222
|
-
|
|
223
|
-
it 'displays months if :months => true' do
|
|
224
|
-
|
|
225
|
-
expect(td(1, :months => true)).to eq('1s')
|
|
226
|
-
expect(td(30 * 24 * 3600 + 1, :months => true)).to eq('1M1s')
|
|
227
|
-
end
|
|
228
|
-
|
|
229
|
-
it 'turns floats into duration strings' do
|
|
230
|
-
|
|
231
|
-
expect(td(0.1)).to eq('100')
|
|
232
|
-
expect(td(1.1)).to eq('1s100')
|
|
233
|
-
end
|
|
234
|
-
end
|
|
235
|
-
|
|
236
|
-
describe '.to_duration_hash' do
|
|
237
|
-
|
|
238
|
-
def tdh(o, opts={})
|
|
239
|
-
Rufus::Scheduler.to_duration_hash(o, opts)
|
|
240
|
-
end
|
|
241
|
-
|
|
242
|
-
it 'turns integers duration hashes' do
|
|
243
|
-
|
|
244
|
-
expect(tdh(0)).to eq({})
|
|
245
|
-
expect(tdh(60)).to eq({ :m => 1 })
|
|
246
|
-
end
|
|
247
|
-
|
|
248
|
-
it 'turns floats duration hashes' do
|
|
249
|
-
|
|
250
|
-
expect(tdh(0.128)).to eq({ :ms => 128 })
|
|
251
|
-
expect(tdh(60.127)).to eq({ :m => 1, :ms => 127 })
|
|
252
|
-
end
|
|
253
|
-
|
|
254
|
-
it 'drops seconds and milliseconds if :drop_seconds => true' do
|
|
255
|
-
|
|
256
|
-
expect(tdh(61.127)).to eq({ :m => 1, :s => 1, :ms => 127 })
|
|
257
|
-
expect(tdh(61.127, :drop_seconds => true)).to eq({ :m => 1 })
|
|
258
|
-
end
|
|
259
|
-
end
|
|
260
|
-
end
|
|
261
|
-
|
data/spec/schedule_at_spec.rb
DELETED
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
#
|
|
3
|
-
# Specifying rufus-scheduler
|
|
4
|
-
#
|
|
5
|
-
# Wed Apr 17 06:00:59 JST 2013
|
|
6
|
-
#
|
|
7
|
-
|
|
8
|
-
require 'spec_helper'
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
describe Rufus::Scheduler do
|
|
12
|
-
|
|
13
|
-
before :each do
|
|
14
|
-
@scheduler = Rufus::Scheduler.new
|
|
15
|
-
end
|
|
16
|
-
after :each do
|
|
17
|
-
@scheduler.shutdown
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
describe '#at' do
|
|
21
|
-
|
|
22
|
-
it 'raises if the block to schedule is missing' do
|
|
23
|
-
|
|
24
|
-
expect {
|
|
25
|
-
@scheduler.at(Time.now + 3600)
|
|
26
|
-
}.to raise_error(ArgumentError)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it 'returns a job id' do
|
|
30
|
-
|
|
31
|
-
job_id =
|
|
32
|
-
@scheduler.at(Time.now + 3600) do
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
expect(job_id.class).to eq(String)
|
|
36
|
-
expect(job_id).to match(/^at_/)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it 'returns a job if :job => true' do
|
|
40
|
-
|
|
41
|
-
job =
|
|
42
|
-
@scheduler.at(Time.now + 3600, :job => true) do
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
expect(job.class).to eq(Rufus::Scheduler::AtJob)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
it 'adds a job' do
|
|
49
|
-
|
|
50
|
-
t = Time.now + 3600
|
|
51
|
-
|
|
52
|
-
@scheduler.at(t) do
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
expect(@scheduler.jobs.size).to eq(1)
|
|
56
|
-
expect(@scheduler.jobs.first.class).to eq(Rufus::Scheduler::AtJob)
|
|
57
|
-
expect(@scheduler.jobs.first.time).to eq(t)
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
it 'triggers a job' do
|
|
61
|
-
|
|
62
|
-
a = false
|
|
63
|
-
|
|
64
|
-
@scheduler.at(Time.now + 0.100) do
|
|
65
|
-
a = true
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
sleep 0.4
|
|
69
|
-
|
|
70
|
-
expect(a).to eq(true)
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
it 'removes the job after execution' do
|
|
74
|
-
|
|
75
|
-
@scheduler.at(Time.now + 0.100) do
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
sleep 0.4
|
|
79
|
-
|
|
80
|
-
expect(@scheduler.jobs.size).to eq(0)
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
it 'accepts a Time instance' do
|
|
84
|
-
|
|
85
|
-
t = Time.now + 3600
|
|
86
|
-
|
|
87
|
-
job = @scheduler.at(t, :job => true) {}
|
|
88
|
-
|
|
89
|
-
expect(job.time).to eq(t)
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
it 'accepts a time string' do
|
|
93
|
-
|
|
94
|
-
job = @scheduler.at('2100-12-12 20:30', :job => true) {}
|
|
95
|
-
|
|
96
|
-
expect(job.time).to eq(Time.parse('2100-12-12 20:30'))
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
it 'accepts a time string with a delta timezone' do
|
|
100
|
-
|
|
101
|
-
job = @scheduler.at('2100-12-12 20:30 -0200', :job => true) {}
|
|
102
|
-
|
|
103
|
-
expect(job.time).to eq(Time.parse('2100-12-12 20:30 -0200'))
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
it 'accepts a time string with a named timezone' do
|
|
107
|
-
|
|
108
|
-
job = @scheduler.at('2050-12-12 20:30 Europe/Berlin', :job => true) {}
|
|
109
|
-
|
|
110
|
-
expect(job.time.strftime('%c %z')).to eq('Mon Dec 12 19:30:00 2050 +0000')
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
it 'accepts a Chronic string (if Chronic is present)' do
|
|
114
|
-
|
|
115
|
-
with_chronic do
|
|
116
|
-
|
|
117
|
-
job = @scheduler.schedule_at('next tuesday at 12:00') {}
|
|
118
|
-
|
|
119
|
-
expect(job.time.wday).to eq(2)
|
|
120
|
-
expect(job.time.hour).to eq(12)
|
|
121
|
-
expect(job.time.min).to eq(0)
|
|
122
|
-
expect(job.time).to be > Time.now
|
|
123
|
-
end
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
it 'accepts a Chronic string and Chronic options (if Chronic present)' do
|
|
127
|
-
|
|
128
|
-
with_chronic do
|
|
129
|
-
|
|
130
|
-
job =
|
|
131
|
-
@scheduler.schedule_at(
|
|
132
|
-
'may 27th at 12:00', :now => Time.local(Time.now.year + 2, 1, 1)
|
|
133
|
-
) {}
|
|
134
|
-
|
|
135
|
-
expect(job.time.year).to eq(Time.now.year + 2)
|
|
136
|
-
expect(job.time.month).to eq(5)
|
|
137
|
-
expect(job.time.day).to eq(27)
|
|
138
|
-
expect(job.time.hour).to eq(12)
|
|
139
|
-
expect(job.time.min).to eq(0)
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
it 'accepts an ActiveSupport time thinggy'
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
describe '#schedule_at' do
|
|
147
|
-
|
|
148
|
-
it 'returns a job' do
|
|
149
|
-
|
|
150
|
-
job = @scheduler.schedule_at(Time.now + 3600) do
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
expect(job.class).to eq(Rufus::Scheduler::AtJob)
|
|
154
|
-
expect(job.id).to match(/^at_/)
|
|
155
|
-
end
|
|
156
|
-
end
|
|
157
|
-
end
|
|
158
|
-
|
data/spec/schedule_cron_spec.rb
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
#
|
|
3
|
-
# Specifying rufus-scheduler
|
|
4
|
-
#
|
|
5
|
-
# Sat Jul 13 04:52:08 JST 2013
|
|
6
|
-
#
|
|
7
|
-
# In the train between Bern and Fribourg, riding back
|
|
8
|
-
# from the @ruvetia drinkup
|
|
9
|
-
#
|
|
10
|
-
|
|
11
|
-
require 'spec_helper'
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
describe Rufus::Scheduler do
|
|
15
|
-
|
|
16
|
-
before :each do
|
|
17
|
-
@scheduler = Rufus::Scheduler.new
|
|
18
|
-
end
|
|
19
|
-
after :each do
|
|
20
|
-
@scheduler.shutdown
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
describe '#cron' do
|
|
24
|
-
|
|
25
|
-
it 'schedules' do
|
|
26
|
-
|
|
27
|
-
counter = 0
|
|
28
|
-
|
|
29
|
-
sleep_until_next_second
|
|
30
|
-
sleep 0.3 # make sure to schedule right after a scheduler 'tick'
|
|
31
|
-
|
|
32
|
-
job =
|
|
33
|
-
@scheduler.cron '* * * * * *', :job => true do
|
|
34
|
-
counter = counter + 1
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
sleep_until_next_second
|
|
38
|
-
sleep_until_next_second
|
|
39
|
-
sleep 0.3 # be sure to be well into the second
|
|
40
|
-
|
|
41
|
-
expect(counter).to eq(2)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
it 'raises if the job frequency is higher than the scheduler frequency' do
|
|
45
|
-
|
|
46
|
-
@scheduler.frequency = 10
|
|
47
|
-
|
|
48
|
-
expect {
|
|
49
|
-
@scheduler.cron '* * * * * *' do; end
|
|
50
|
-
}.to raise_error(ArgumentError)
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
describe '#schedule_cron' do
|
|
55
|
-
|
|
56
|
-
it 'returns a CronJob instance' do
|
|
57
|
-
|
|
58
|
-
job = @scheduler.schedule_cron '* * * * *' do; end
|
|
59
|
-
|
|
60
|
-
expect(job.class).to eq(Rufus::Scheduler::CronJob)
|
|
61
|
-
expect(job.original).to eq('* * * * *')
|
|
62
|
-
expect(job.job_id).to match(/^cron_/)
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
|
data/spec/schedule_every_spec.rb
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
#
|
|
3
|
-
# Specifying rufus-scheduler
|
|
4
|
-
#
|
|
5
|
-
# Wed Apr 17 06:00:59 JST 2013
|
|
6
|
-
#
|
|
7
|
-
|
|
8
|
-
require 'spec_helper'
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
describe Rufus::Scheduler do
|
|
12
|
-
|
|
13
|
-
before :each do
|
|
14
|
-
@scheduler = Rufus::Scheduler.new
|
|
15
|
-
end
|
|
16
|
-
after :each do
|
|
17
|
-
@scheduler.shutdown
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
describe '#every' do
|
|
21
|
-
|
|
22
|
-
it 'adds a job' do
|
|
23
|
-
|
|
24
|
-
@scheduler.every(10) do
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
expect(@scheduler.jobs.size).to eq(1)
|
|
28
|
-
expect(@scheduler.jobs.first.class).to eq(Rufus::Scheduler::EveryJob)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
it 'triggers a job (2 times)' do
|
|
32
|
-
|
|
33
|
-
counter = 0
|
|
34
|
-
|
|
35
|
-
@scheduler.every(0.4) do
|
|
36
|
-
counter += 1
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
sleep 2.0
|
|
40
|
-
|
|
41
|
-
expect(counter).to be > 2
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
it 'does not remove the job after execution' do
|
|
45
|
-
|
|
46
|
-
@scheduler.every(0.4) do
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
sleep 0.9
|
|
50
|
-
|
|
51
|
-
expect(@scheduler.jobs.size).to eq(1)
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it 'raises on negative frequencies' do
|
|
55
|
-
|
|
56
|
-
expect {
|
|
57
|
-
@scheduler.every(-1) do
|
|
58
|
-
end
|
|
59
|
-
}.to raise_error(ArgumentError)
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
it 'raises on zero frequencies' do
|
|
63
|
-
|
|
64
|
-
expect {
|
|
65
|
-
@scheduler.every(0) do
|
|
66
|
-
end
|
|
67
|
-
}.to raise_error(ArgumentError)
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
it 'does not reschedule if the job was unscheduled' do
|
|
71
|
-
|
|
72
|
-
counter = 0
|
|
73
|
-
|
|
74
|
-
job =
|
|
75
|
-
@scheduler.schedule_every '0.5s' do
|
|
76
|
-
counter = counter + 1
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
sleep 1.6
|
|
80
|
-
|
|
81
|
-
job.unschedule
|
|
82
|
-
c = counter
|
|
83
|
-
|
|
84
|
-
sleep 1.6
|
|
85
|
-
|
|
86
|
-
expect(counter).to eq(c)
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
it 'raises if the job frequency is higher than the scheduler frequency' do
|
|
90
|
-
|
|
91
|
-
@scheduler.frequency = 10
|
|
92
|
-
|
|
93
|
-
expect {
|
|
94
|
-
@scheduler.every '1s' do; end
|
|
95
|
-
}.to raise_error(ArgumentError)
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
describe '#schedule_every' do
|
|
100
|
-
|
|
101
|
-
it 'accepts a duration string' do
|
|
102
|
-
|
|
103
|
-
job = @scheduler.schedule_every('1h') do; end
|
|
104
|
-
|
|
105
|
-
expect(job.frequency).to eq(3600.0)
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
end
|
|
109
|
-
|
data/spec/schedule_in_spec.rb
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
#
|
|
3
|
-
# Specifying rufus-scheduler
|
|
4
|
-
#
|
|
5
|
-
# Wed Apr 17 06:00:59 JST 2013
|
|
6
|
-
#
|
|
7
|
-
|
|
8
|
-
require 'spec_helper'
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
describe Rufus::Scheduler do
|
|
12
|
-
|
|
13
|
-
before :each do
|
|
14
|
-
@scheduler = Rufus::Scheduler.new
|
|
15
|
-
end
|
|
16
|
-
after :each do
|
|
17
|
-
@scheduler.shutdown
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
describe '#in' do
|
|
21
|
-
|
|
22
|
-
it 'adds a job' do
|
|
23
|
-
|
|
24
|
-
@scheduler.in(3600) do
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
expect(@scheduler.jobs.size).to eq(1)
|
|
28
|
-
expect(@scheduler.jobs.first.class).to eq(Rufus::Scheduler::InJob)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
it 'triggers a job' do
|
|
32
|
-
|
|
33
|
-
a = false
|
|
34
|
-
|
|
35
|
-
@scheduler.in(0.4) do
|
|
36
|
-
a = true
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
sleep 0.9
|
|
40
|
-
|
|
41
|
-
expect(a).to eq(true)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
it 'removes the job after execution' do
|
|
45
|
-
|
|
46
|
-
@scheduler.in(0.4) do
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
sleep 0.700
|
|
50
|
-
|
|
51
|
-
expect(@scheduler.jobs.size).to eq(0)
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
describe '#schedule_in' do
|
|
56
|
-
|
|
57
|
-
it 'accepts a number' do
|
|
58
|
-
|
|
59
|
-
job = @scheduler.schedule_in(3600) {}
|
|
60
|
-
|
|
61
|
-
expect(job.original).to eq(3600)
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
it 'accepts a duration string' do
|
|
65
|
-
|
|
66
|
-
job = @scheduler.schedule_in('1h') {}
|
|
67
|
-
|
|
68
|
-
expect(job.original).to eq('1h')
|
|
69
|
-
expect(job.time).to be >= job.scheduled_at + 3509
|
|
70
|
-
expect(job.time).to be <= job.scheduled_at + 3601
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
it 'accepts an ActiveSupport .from_now thinggy'
|
|
74
|
-
#
|
|
75
|
-
# schedule_in(2.days.from_now)
|
|
76
|
-
#
|
|
77
|
-
# that'd simply require "in" to be a bit like "at"...
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
|