clockwork 0.2.4 → 0.3.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/VERSION +1 -1
- data/lib/clockwork.rb +29 -9
- data/test/clockwork_test.rb +22 -0
- metadata +3 -5
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/lib/clockwork.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
module Clockwork
|
2
2
|
class FailedToParse < StandardError; end;
|
3
3
|
|
4
|
+
@@events = []
|
5
|
+
|
4
6
|
class Event
|
5
7
|
attr_accessor :job, :last
|
6
8
|
|
@@ -18,7 +20,7 @@ module Clockwork
|
|
18
20
|
|
19
21
|
def time?(t)
|
20
22
|
ellapsed_ready = (@last.nil? or (t - @last).to_i >= @period)
|
21
|
-
time_ready = (@at.nil? or (t.hour == @at[0] and t.min == @at[1]))
|
23
|
+
time_ready = (@at.nil? or ((@at[0].nil? or t.hour == @at[0]) and t.min == @at[1]))
|
22
24
|
ellapsed_ready and time_ready
|
23
25
|
end
|
24
26
|
|
@@ -46,10 +48,16 @@ module Clockwork
|
|
46
48
|
|
47
49
|
def parse_at(at)
|
48
50
|
return unless at
|
49
|
-
m = at.match(/^(\d\d):(\d\d)$/)
|
51
|
+
m = at.match(/^(\d\d|\*+):(\d\d)$/)
|
50
52
|
raise FailedToParse, at unless m
|
51
|
-
|
52
|
-
|
53
|
+
if m[1][0] == '*'
|
54
|
+
hour = nil
|
55
|
+
else
|
56
|
+
hour = m[1].to_i
|
57
|
+
raise FailedToParse, at if hour >= 24
|
58
|
+
end
|
59
|
+
min = m[2].to_i
|
60
|
+
raise FailedToParse, at if min >= 60
|
53
61
|
[ hour, min ]
|
54
62
|
end
|
55
63
|
end
|
@@ -68,10 +76,15 @@ module Clockwork
|
|
68
76
|
end
|
69
77
|
|
70
78
|
def every(period, job, options={}, &block)
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
79
|
+
if options[:at].respond_to?(:each)
|
80
|
+
each_options = options.clone
|
81
|
+
options[:at].each do |at|
|
82
|
+
each_options[:at] = at
|
83
|
+
register(period, job, block, each_options)
|
84
|
+
end
|
85
|
+
else
|
86
|
+
register(period, job, block, options)
|
87
|
+
end
|
75
88
|
end
|
76
89
|
|
77
90
|
def run
|
@@ -103,6 +116,13 @@ module Clockwork
|
|
103
116
|
@@events = []
|
104
117
|
@@handler = nil
|
105
118
|
end
|
119
|
+
|
120
|
+
private
|
121
|
+
def register(period, job, block, options)
|
122
|
+
event = Event.new(period, job, block || get_handler, options)
|
123
|
+
@@events << event
|
124
|
+
event
|
125
|
+
end
|
106
126
|
|
107
127
|
end
|
108
128
|
|
@@ -120,4 +140,4 @@ unless 1.respond_to?(:seconds)
|
|
120
140
|
def days; self * 86400; end
|
121
141
|
alias :day :days
|
122
142
|
end
|
123
|
-
end
|
143
|
+
end
|
data/test/clockwork_test.rb
CHANGED
@@ -56,6 +56,28 @@ class ClockworkTest < Test::Unit::TestCase
|
|
56
56
|
assert_will_run Time.parse('jan 2 2010 16:20:00')
|
57
57
|
end
|
58
58
|
|
59
|
+
test "twice a day at 16:20 and 18:10" do
|
60
|
+
Clockwork.every(1.day, 'myjob', :at => ['16:20', '18:10'])
|
61
|
+
|
62
|
+
assert_wont_run Time.parse('jan 1 2010 16:19:59')
|
63
|
+
assert_will_run Time.parse('jan 1 2010 16:20:00')
|
64
|
+
assert_wont_run Time.parse('jan 1 2010 16:20:01')
|
65
|
+
|
66
|
+
assert_wont_run Time.parse('jan 1 2010 18:09:59')
|
67
|
+
assert_will_run Time.parse('jan 1 2010 18:10:00')
|
68
|
+
assert_wont_run Time.parse('jan 1 2010 18:10:01')
|
69
|
+
end
|
70
|
+
|
71
|
+
test "once an hour at **:20" do
|
72
|
+
Clockwork.every(1.hour, 'myjob', :at => '**:20')
|
73
|
+
|
74
|
+
assert_wont_run Time.parse('jan 1 2010 15:19:59')
|
75
|
+
assert_will_run Time.parse('jan 1 2010 15:20:00')
|
76
|
+
assert_wont_run Time.parse('jan 1 2010 15:20:01')
|
77
|
+
assert_wont_run Time.parse('jan 2 2010 16:19:59')
|
78
|
+
assert_will_run Time.parse('jan 2 2010 16:20:00')
|
79
|
+
end
|
80
|
+
|
59
81
|
test "aborts when no handler defined" do
|
60
82
|
Clockwork.clear!
|
61
83
|
assert_raise(Clockwork::NoHandlerDefined) do
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: clockwork
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.3.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Adam Wiggins
|
@@ -10,8 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
14
|
-
default_executable: clockwork
|
13
|
+
date: 2011-10-14 00:00:00 Z
|
15
14
|
dependencies: []
|
16
15
|
|
17
16
|
description: A scheduler process to replace cron, using a more flexible Ruby syntax running as a single long-running process. Inspired by rufus-scheduler and resque-scheduler.
|
@@ -29,7 +28,6 @@ files:
|
|
29
28
|
- bin/clockwork
|
30
29
|
- lib/clockwork.rb
|
31
30
|
- test/clockwork_test.rb
|
32
|
-
has_rdoc: true
|
33
31
|
homepage: http://github.com/adamwiggins/clockwork
|
34
32
|
licenses: []
|
35
33
|
|
@@ -53,7 +51,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
53
51
|
requirements: []
|
54
52
|
|
55
53
|
rubyforge_project: clockwork
|
56
|
-
rubygems_version: 1.
|
54
|
+
rubygems_version: 1.8.6
|
57
55
|
signing_key:
|
58
56
|
specification_version: 3
|
59
57
|
summary: A scheduler process to replace cron.
|