rufus-scheduler 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.txt +8 -0
- data/lib/rufus/scheduler.rb +66 -14
- data/test/scheduler_4_test.rb +1 -1
- data/test/scheduler_5_test.rb +82 -0
- data/test/test.rb +1 -0
- metadata +3 -2
data/CHANGELOG.txt
CHANGED
@@ -2,5 +2,13 @@
|
|
2
2
|
= rufus-scheduler CHANGELOG.txt
|
3
3
|
|
4
4
|
|
5
|
+
== rufus-scheduler - 1.0.2 released 2008/01/26
|
6
|
+
|
7
|
+
- patch #17505 : added params :first_at and :first_in for schedule_every()
|
8
|
+
a patch by John Didion - s115
|
9
|
+
|
10
|
+
|
5
11
|
== rufus-scheduler - 1.0 released 2008/01/24
|
6
12
|
|
13
|
+
- initial release after "openwferu-scheduler" - 0.9.16
|
14
|
+
|
data/lib/rufus/scheduler.rb
CHANGED
@@ -45,7 +45,25 @@ module Rufus
|
|
45
45
|
# params (usually an array or nil), either a block, which is more in the
|
46
46
|
# Ruby way.
|
47
47
|
#
|
48
|
+
# == The gem "openwferu-scheduler"
|
49
|
+
#
|
50
|
+
# This scheduler was previously known as the "openwferu-scheduler" gem.
|
51
|
+
#
|
52
|
+
# To ensure that code tapping the previous gem still runs fine with
|
53
|
+
# "rufus-scheduler", this new gem has 'pointers' for the old class
|
54
|
+
# names.
|
55
|
+
#
|
56
|
+
# require 'rubygems'
|
57
|
+
# require 'openwfe/util/scheduler'
|
58
|
+
# s = OpenWFE::Scheduler.new
|
59
|
+
#
|
60
|
+
# will still run OK with "rufus-scheduler".
|
61
|
+
#
|
48
62
|
# == Examples
|
63
|
+
#
|
64
|
+
# require 'rubygems'
|
65
|
+
# require 'rufus/scheduler'
|
66
|
+
#
|
49
67
|
#
|
50
68
|
# scheduler.schedule_in("3d") do
|
51
69
|
# regenerate_monthly_report()
|
@@ -199,6 +217,19 @@ module Rufus
|
|
199
217
|
# params[:dont_reschedule] = true if $mail
|
200
218
|
# end
|
201
219
|
#
|
220
|
+
# == 'Every jobs', :first_at and :first_in
|
221
|
+
#
|
222
|
+
# Since rufus-scheduler 1.0.2, the schedule_every methods recognizes two
|
223
|
+
# optional parameters, :first_at and :first_in
|
224
|
+
#
|
225
|
+
# scheduler.schedule_every "2d", :first_in => "5h" do
|
226
|
+
# # schedule something every two days, start in 5 hours...
|
227
|
+
# end
|
228
|
+
#
|
229
|
+
# scheduler.schedule_every "2d", :first_at => "5h" do
|
230
|
+
# # schedule something every two days, start in 5 hours...
|
231
|
+
# end
|
232
|
+
#
|
202
233
|
class Scheduler
|
203
234
|
|
204
235
|
#
|
@@ -375,6 +406,13 @@ module Rufus
|
|
375
406
|
# # won't get rescheduled in case of exception
|
376
407
|
# end
|
377
408
|
#
|
409
|
+
# Since rufus-scheduler 1.0.2, the params :first_at and :first_in are
|
410
|
+
# accepted.
|
411
|
+
#
|
412
|
+
# scheduler.schedule_every "2d", :first_in => "5h" do
|
413
|
+
# # schedule something every two days, start in 5 hours...
|
414
|
+
# end
|
415
|
+
#
|
378
416
|
def schedule_every (freq, params={}, &block)
|
379
417
|
|
380
418
|
f = duration_to_f freq
|
@@ -383,9 +421,17 @@ module Rufus
|
|
383
421
|
schedulable = params[:schedulable]
|
384
422
|
params[:every] = freq
|
385
423
|
|
386
|
-
|
387
|
-
|
388
|
-
|
424
|
+
first_at = params.delete :first_at
|
425
|
+
first_in = params.delete :first_in
|
426
|
+
|
427
|
+
previous_at = params[:previous_at]
|
428
|
+
|
429
|
+
next_at = if first_at
|
430
|
+
first_at
|
431
|
+
elsif first_in
|
432
|
+
Time.now.to_f + duration_to_f(first_in)
|
433
|
+
elsif previous_at
|
434
|
+
previous_at + f
|
389
435
|
else
|
390
436
|
Time.now.to_f + f
|
391
437
|
end
|
@@ -423,7 +469,7 @@ module Rufus
|
|
423
469
|
# ok, reschedule ...
|
424
470
|
|
425
471
|
params[:job_id] = job_id
|
426
|
-
params[:
|
472
|
+
params[:previous_at] = at
|
427
473
|
|
428
474
|
schedule_every params[:every], params, &block
|
429
475
|
#
|
@@ -662,14 +708,7 @@ module Rufus
|
|
662
708
|
|
663
709
|
#puts "0 at is '#{at.to_s}' (#{at.class})"
|
664
710
|
|
665
|
-
at =
|
666
|
-
if at.kind_of?(String)
|
667
|
-
|
668
|
-
at = Rufus::to_gm_time(at) \
|
669
|
-
if at.kind_of?(DateTime)
|
670
|
-
|
671
|
-
at = at.to_f \
|
672
|
-
if at.kind_of?(Time)
|
711
|
+
at = at_to_f at
|
673
712
|
|
674
713
|
#puts "1 at is '#{at.to_s}' (#{at.class})"}"
|
675
714
|
|
@@ -677,13 +716,14 @@ module Rufus
|
|
677
716
|
|
678
717
|
job_id = params[:job_id]
|
679
718
|
|
680
|
-
b = to_block
|
719
|
+
b = to_block params, &block
|
681
720
|
|
682
|
-
job = jobClass.new
|
721
|
+
job = jobClass.new self, at, job_id, params, &b
|
683
722
|
|
684
723
|
#do_unschedule(job_id) if job_id
|
685
724
|
|
686
725
|
if at < (Time.new.to_f + @precision)
|
726
|
+
|
687
727
|
job.trigger() unless params[:discard_past]
|
688
728
|
return nil
|
689
729
|
end
|
@@ -707,6 +747,18 @@ module Rufus
|
|
707
747
|
Float(s.to_s)
|
708
748
|
end
|
709
749
|
|
750
|
+
#
|
751
|
+
# Ensures an 'at' instance is translated to a float
|
752
|
+
# (to be compared with the float coming from time.to_f)
|
753
|
+
#
|
754
|
+
def at_to_f (at)
|
755
|
+
|
756
|
+
at = Rufus::to_ruby_time(at) if at.kind_of?(String)
|
757
|
+
at = Rufus::to_gm_time(at) if at.kind_of?(DateTime)
|
758
|
+
at = at.to_f if at.kind_of?(Time)
|
759
|
+
at
|
760
|
+
end
|
761
|
+
|
710
762
|
#
|
711
763
|
# Returns a block. If a block is passed, will return it, else,
|
712
764
|
# if a :schedulable is set in the params, will return a block
|
data/test/scheduler_4_test.rb
CHANGED
@@ -0,0 +1,82 @@
|
|
1
|
+
|
2
|
+
#
|
3
|
+
# Testing the 'rufus-scheduler'
|
4
|
+
#
|
5
|
+
# John Mettraux at openwfe.org
|
6
|
+
#
|
7
|
+
# Sat Jan 26 20:05:57 JST 2008
|
8
|
+
#
|
9
|
+
|
10
|
+
require 'test/unit'
|
11
|
+
require 'rufus/scheduler'
|
12
|
+
|
13
|
+
|
14
|
+
class Scheduler5Test < Test::Unit::TestCase
|
15
|
+
|
16
|
+
#def setup
|
17
|
+
#end
|
18
|
+
|
19
|
+
#def teardown
|
20
|
+
#end
|
21
|
+
|
22
|
+
#
|
23
|
+
# Testing the :first_at parameter
|
24
|
+
#
|
25
|
+
def test_0
|
26
|
+
|
27
|
+
s = Rufus::Scheduler.new
|
28
|
+
s.start
|
29
|
+
|
30
|
+
$count = 0
|
31
|
+
|
32
|
+
fa = Time.now + 3
|
33
|
+
|
34
|
+
s.schedule_every "1s", :first_at => fa do
|
35
|
+
$count += 1
|
36
|
+
end
|
37
|
+
|
38
|
+
sleep 1
|
39
|
+
|
40
|
+
assert_equal 0, $count
|
41
|
+
|
42
|
+
sleep 3
|
43
|
+
|
44
|
+
assert_equal 1, $count
|
45
|
+
|
46
|
+
sleep 1
|
47
|
+
|
48
|
+
assert_equal 2, $count
|
49
|
+
|
50
|
+
s.stop
|
51
|
+
end
|
52
|
+
|
53
|
+
#
|
54
|
+
# Testing the :first_in parameter
|
55
|
+
#
|
56
|
+
def test_1
|
57
|
+
|
58
|
+
s = Rufus::Scheduler.new
|
59
|
+
s.start
|
60
|
+
|
61
|
+
$count = 0
|
62
|
+
|
63
|
+
s.schedule_every "1s", :first_in => "3s" do
|
64
|
+
$count += 1
|
65
|
+
end
|
66
|
+
|
67
|
+
sleep 1
|
68
|
+
|
69
|
+
assert_equal 0, $count
|
70
|
+
|
71
|
+
sleep 3
|
72
|
+
|
73
|
+
assert_equal 1, $count
|
74
|
+
|
75
|
+
sleep 1
|
76
|
+
|
77
|
+
assert_equal 2, $count
|
78
|
+
|
79
|
+
s.stop
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
data/test/test.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rufus-scheduler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Mettraux
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-01-
|
12
|
+
date: 2008-01-26 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -36,6 +36,7 @@ files:
|
|
36
36
|
- test/scheduler_2_test.rb
|
37
37
|
- test/scheduler_3_test.rb
|
38
38
|
- test/scheduler_4_test.rb
|
39
|
+
- test/scheduler_5_test.rb
|
39
40
|
- test/test.rb
|
40
41
|
- test/time_test.rb
|
41
42
|
- README.txt
|