whenever 0.6.7 → 0.6.8
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +11 -0
- data/README.md +7 -0
- data/lib/whenever.rb +1 -0
- data/lib/whenever/command_line.rb +2 -2
- data/lib/whenever/cron.rb +27 -12
- data/lib/whenever/version.rb +1 -1
- data/test/functional/output_at_test.rb +3 -3
- data/test/unit/cron_test.rb +12 -6
- metadata +4 -4
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
### 0.6.8 / May 24th, 2011
|
2
|
+
|
3
|
+
* Convert most shortcuts to seconds. every :day -> every 1.day. #129 [Javan Makhmali]
|
4
|
+
|
5
|
+
* Allow commas in raw cron syntax. #130 [Marco Bergantin, Javan Makhmali]
|
6
|
+
|
7
|
+
* Output no update message as comments. #135 [Javan Makhmali]
|
8
|
+
|
9
|
+
* require 'thread' to support Rubygems >= 1.6.0. #132 [Javan Makhmali]
|
10
|
+
|
11
|
+
|
1
12
|
### 0.6.7 / March 23rd, 2011
|
2
13
|
|
3
14
|
* Fix issue with comment block being corrupted during subsequent insertion of duplicate entries to the crontab. #123 [Jeremy (@lingmann)]
|
data/README.md
CHANGED
@@ -95,6 +95,13 @@ For example, if you're using bundler do this:
|
|
95
95
|
set :whenever_command, "bundle exec whenever"
|
96
96
|
require "whenever/capistrano"
|
97
97
|
|
98
|
+
If you are using different environments (such as staging, production), then you may want to do this:
|
99
|
+
|
100
|
+
set :whenever_environment, defer { stage }
|
101
|
+
require "whenever/capistrano"
|
102
|
+
|
103
|
+
The capistrano variable `:stage` should be the one holding your environment name. This will make the correct `:environment` available in your schedule.rb.
|
104
|
+
|
98
105
|
### The `whenever` command
|
99
106
|
|
100
107
|
$ cd /my/rails/app
|
data/lib/whenever.rb
CHANGED
@@ -39,8 +39,8 @@ module Whenever
|
|
39
39
|
write_crontab(whenever_cron)
|
40
40
|
else
|
41
41
|
puts Whenever.cron(@options)
|
42
|
-
puts "[message] Above is your schedule file converted to cron syntax; your crontab file was not updated."
|
43
|
-
puts "[message] Run `whenever --help' for more options."
|
42
|
+
puts "## [message] Above is your schedule file converted to cron syntax; your crontab file was not updated."
|
43
|
+
puts "## [message] Run `whenever --help' for more options."
|
44
44
|
exit(0)
|
45
45
|
end
|
46
46
|
end
|
data/lib/whenever/cron.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module Whenever
|
2
2
|
module Output
|
3
3
|
class Cron
|
4
|
+
REGEX = /^.+ .+ .+ .+ .+.?$/
|
4
5
|
|
5
6
|
attr_accessor :time, :task
|
6
7
|
|
@@ -10,9 +11,14 @@ module Whenever
|
|
10
11
|
@at = at.is_a?(String) ? (Chronic.parse(at) || 0) : (at || 0)
|
11
12
|
end
|
12
13
|
|
13
|
-
def self.enumerate(item)
|
14
|
+
def self.enumerate(item, detect_cron = true)
|
14
15
|
if item and item.is_a?(String)
|
15
|
-
items =
|
16
|
+
items =
|
17
|
+
if detect_cron && item =~ REGEX
|
18
|
+
[item]
|
19
|
+
else
|
20
|
+
item.split(',')
|
21
|
+
end
|
16
22
|
else
|
17
23
|
items = item
|
18
24
|
items = [items] unless items and items.respond_to?(:each)
|
@@ -22,7 +28,7 @@ module Whenever
|
|
22
28
|
|
23
29
|
def self.output(times, job)
|
24
30
|
enumerate(times).each do |time|
|
25
|
-
enumerate(job.at).each do |at|
|
31
|
+
enumerate(job.at, false).each do |at|
|
26
32
|
yield new(time, job.output, at).output
|
27
33
|
end
|
28
34
|
end
|
@@ -34,7 +40,7 @@ module Whenever
|
|
34
40
|
|
35
41
|
def time_in_cron_syntax
|
36
42
|
case @time
|
37
|
-
when
|
43
|
+
when REGEX then @time # raw cron sytax given
|
38
44
|
when Symbol then parse_symbol
|
39
45
|
when String then parse_as_string
|
40
46
|
else parse_time
|
@@ -45,16 +51,25 @@ module Whenever
|
|
45
51
|
|
46
52
|
def parse_symbol
|
47
53
|
shortcut = case @time
|
48
|
-
when :reboot
|
49
|
-
when :year
|
50
|
-
when :
|
51
|
-
|
52
|
-
when :
|
53
|
-
when :
|
54
|
-
when :
|
54
|
+
when :reboot then '@reboot'
|
55
|
+
when :year then 12.months
|
56
|
+
when :yearly,
|
57
|
+
:annually then '@annually'
|
58
|
+
when :day then 1.day
|
59
|
+
when :daily then '@daily'
|
60
|
+
when :midnight then '@midnight'
|
61
|
+
when :month then 1.month
|
62
|
+
when :monthly then '@monthly'
|
63
|
+
when :week then 1.week
|
64
|
+
when :weekly then '@weekly'
|
65
|
+
when :hour then 1.hour
|
66
|
+
when :hourly then '@hourly'
|
55
67
|
end
|
56
68
|
|
57
|
-
if shortcut
|
69
|
+
if shortcut.is_a?(Numeric)
|
70
|
+
@time = shortcut
|
71
|
+
parse_time
|
72
|
+
elsif shortcut
|
58
73
|
if @at.is_a?(Time) || (@at.is_a?(Numeric) && @at > 0)
|
59
74
|
raise ArgumentError, "You cannot specify an ':at' when using the shortcuts for times."
|
60
75
|
else
|
data/lib/whenever/version.rb
CHANGED
@@ -166,7 +166,7 @@ class OutputAtTest < Test::Unit::TestCase
|
|
166
166
|
<<-file
|
167
167
|
set :job_template, nil
|
168
168
|
set :path, '/your/path'
|
169
|
-
every :
|
169
|
+
every :daily do
|
170
170
|
rake "blah:blah"
|
171
171
|
runner "runner_1"
|
172
172
|
command "command_1"
|
@@ -254,14 +254,14 @@ class OutputAtTest < Test::Unit::TestCase
|
|
254
254
|
@output = Whenever.cron \
|
255
255
|
<<-file
|
256
256
|
set :job_template, nil
|
257
|
-
every '0 0 27
|
257
|
+
every '0 0 27,31 * *' do
|
258
258
|
command "blahblah"
|
259
259
|
end
|
260
260
|
file
|
261
261
|
end
|
262
262
|
|
263
263
|
should "output the command using the same cron syntax" do
|
264
|
-
assert_match '0 0 27
|
264
|
+
assert_match '0 0 27,31 * * blahblah', @output
|
265
265
|
end
|
266
266
|
end
|
267
267
|
|
data/test/unit/cron_test.rb
CHANGED
@@ -174,20 +174,26 @@ class CronTest < Test::Unit::TestCase
|
|
174
174
|
context "When parsing time using the cron shortcuts" do
|
175
175
|
should "parse a :symbol into the correct shortcut" do
|
176
176
|
assert_equal '@reboot', parse_time(:reboot)
|
177
|
-
assert_equal '@annually', parse_time(:
|
177
|
+
assert_equal '@annually', parse_time(:annually)
|
178
178
|
assert_equal '@annually', parse_time(:yearly)
|
179
|
-
assert_equal '@daily', parse_time(:day)
|
180
179
|
assert_equal '@daily', parse_time(:daily)
|
181
180
|
assert_equal '@midnight', parse_time(:midnight)
|
182
|
-
assert_equal '@monthly', parse_time(:month)
|
183
181
|
assert_equal '@monthly', parse_time(:monthly)
|
184
|
-
assert_equal '@
|
182
|
+
assert_equal '@weekly', parse_time(:weekly)
|
185
183
|
assert_equal '@hourly', parse_time(:hourly)
|
186
184
|
end
|
187
185
|
|
186
|
+
should "convert time-based shortcuts to times" do
|
187
|
+
assert_equal '0 0 1 * *', parse_time(:month)
|
188
|
+
assert_equal '0 0 * * *', parse_time(:day)
|
189
|
+
assert_equal '0 * * * *', parse_time(:hour)
|
190
|
+
assert_equal '0 0 1 12 *', parse_time(:year)
|
191
|
+
assert_equal '0 0 1,8,15,22 * *', parse_time(:week)
|
192
|
+
end
|
193
|
+
|
188
194
|
should "raise an exception if a valid shortcut is given but also an :at" do
|
189
195
|
assert_raises ArgumentError do
|
190
|
-
parse_time(:
|
196
|
+
parse_time(:hourly, nil, "1:00 am")
|
191
197
|
end
|
192
198
|
|
193
199
|
assert_raises ArgumentError do
|
@@ -195,7 +201,7 @@ class CronTest < Test::Unit::TestCase
|
|
195
201
|
end
|
196
202
|
|
197
203
|
assert_raises ArgumentError do
|
198
|
-
parse_time(:
|
204
|
+
parse_time(:daily, nil, '4:20pm')
|
199
205
|
end
|
200
206
|
end
|
201
207
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: whenever
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 6
|
9
|
-
-
|
10
|
-
version: 0.6.
|
9
|
+
- 8
|
10
|
+
version: 0.6.8
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Javan Makhmali
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-05-24 00:00:00 -04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|