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