javan-whenever 0.3.1 → 0.3.5
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.rdoc +6 -0
- data/Manifest +1 -1
- data/lib/command_line.rb +2 -2
- data/lib/job_list.rb +35 -6
- data/lib/job_types/runner.rb +1 -1
- data/lib/outputs/cron.rb +18 -4
- data/lib/version.rb +1 -1
- data/test/command_line_test.rb +41 -47
- data/test/output_at_test.rb +137 -0
- data/test/output_command_test.rb +17 -0
- data/test/output_runner_test.rb +17 -1
- data/whenever.gemspec +4 -4
- metadata +4 -2
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
== 0.3.5 / June 13th, 2009
|
2
|
+
|
3
|
+
* Added ability to accept lists of every's and at's and intelligently group them. (ex: every 'monday, wednesday', :at => ['3pm, 6am']). [Sam Ruby]
|
4
|
+
|
5
|
+
* Fixed issue with new lines. #18 [Javan Makhmali]
|
6
|
+
|
1
7
|
== 0.3.1 / June 25th, 2009
|
2
8
|
|
3
9
|
* Removed activesupport gem dependency. #1 [Javan Makhmali]
|
data/Manifest
CHANGED
@@ -15,9 +15,9 @@ Rakefile
|
|
15
15
|
README.rdoc
|
16
16
|
test/command_line_test.rb
|
17
17
|
test/cron_test.rb
|
18
|
+
test/output_at_test.rb
|
18
19
|
test/output_command_test.rb
|
19
20
|
test/output_env_test.rb
|
20
21
|
test/output_rake_test.rb
|
21
22
|
test/output_runner_test.rb
|
22
23
|
test/test_helper.rb
|
23
|
-
whenever.gemspec
|
data/lib/command_line.rb
CHANGED
@@ -40,7 +40,7 @@ module Whenever
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def whenever_cron
|
43
|
-
@whenever_cron ||= [comment_open, Whenever.cron(@options), comment_close].join("\n")
|
43
|
+
@whenever_cron ||= [comment_open, Whenever.cron(@options), comment_close].join("\n") + "\n"
|
44
44
|
end
|
45
45
|
|
46
46
|
def read_crontab
|
@@ -86,7 +86,7 @@ module Whenever
|
|
86
86
|
|
87
87
|
# If an existing identier block is found, replace it with the new cron entries
|
88
88
|
if read_crontab.index(comment_open) && read_crontab.index(comment_close)
|
89
|
-
read_crontab.gsub(Regexp.new("#{comment_open}.+#{comment_close}", Regexp::MULTILINE), whenever_cron)
|
89
|
+
read_crontab.gsub(Regexp.new("#{comment_open}.+#{comment_close}", Regexp::MULTILINE), whenever_cron.chomp)
|
90
90
|
else # Otherwise, append the new cron entries after any existing ones
|
91
91
|
[read_crontab, whenever_cron].join("\n\n")
|
92
92
|
end
|
data/lib/job_list.rb
CHANGED
@@ -62,9 +62,11 @@ module Whenever
|
|
62
62
|
|
63
63
|
private
|
64
64
|
|
65
|
+
#
|
65
66
|
# Takes a string like: "variable1=something&variable2=somethingelse"
|
66
67
|
# and breaks it into variable/value pairs. Used for setting variables at runtime from the command line.
|
67
68
|
# Only works for setting values as strings.
|
69
|
+
#
|
68
70
|
def pre_set(variable_string = nil)
|
69
71
|
return if variable_string.blank?
|
70
72
|
|
@@ -88,21 +90,48 @@ module Whenever
|
|
88
90
|
output.join
|
89
91
|
end
|
90
92
|
|
93
|
+
#
|
94
|
+
# Takes the standard cron output that Whenever generates and finds
|
95
|
+
# similar entries that can be combined. For example: If a job should run
|
96
|
+
# at 3:02am and 4:02am, instead of creating two jobs this method combines
|
97
|
+
# them into one that runs on the 2nd minute at the 3rd and 4th hour.
|
98
|
+
#
|
99
|
+
def combine(entries)
|
100
|
+
entries.map! { |entry| entry.split(/ +/,6 )}
|
101
|
+
0.upto(4) do |f|
|
102
|
+
(entries.length-1).downto(1) do |i|
|
103
|
+
next if entries[i][f] == '*'
|
104
|
+
comparison = entries[i][0...f] + entries[i][f+1..-1]
|
105
|
+
(i-1).downto(0) do |j|
|
106
|
+
next if entries[j][f] == '*'
|
107
|
+
if comparison == entries[j][0...f] + entries[j][f+1..-1]
|
108
|
+
entries[j][f] += ',' + entries[i][f]
|
109
|
+
entries.delete_at(i)
|
110
|
+
break
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
entries.map { |entry| entry.join(' ') }
|
117
|
+
end
|
118
|
+
|
91
119
|
def cron_jobs
|
92
120
|
return if @jobs.empty?
|
93
121
|
|
94
122
|
output = []
|
95
123
|
@jobs.each do |time, jobs|
|
96
124
|
jobs.each do |job|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
125
|
+
Whenever::Output::Cron.output(time, job) do |cron|
|
126
|
+
cron << " >> #{job.cron_log} 2>&1" if job.cron_log
|
127
|
+
cron << "\n\n"
|
128
|
+
output << cron
|
129
|
+
end
|
101
130
|
end
|
102
131
|
end
|
103
132
|
|
104
|
-
output.join
|
133
|
+
combine(output).join
|
105
134
|
end
|
106
135
|
|
107
136
|
end
|
108
|
-
end
|
137
|
+
end
|
data/lib/job_types/runner.rb
CHANGED
data/lib/outputs/cron.rb
CHANGED
@@ -11,9 +11,23 @@ module Whenever
|
|
11
11
|
@at = at.is_a?(String) ? (Chronic.parse(at) || 0) : (at || 0)
|
12
12
|
end
|
13
13
|
|
14
|
-
def self.
|
15
|
-
|
16
|
-
|
14
|
+
def self.enumerate(item)
|
15
|
+
if item and item.is_a?(String)
|
16
|
+
items = item.split(',')
|
17
|
+
else
|
18
|
+
items = item
|
19
|
+
items = [items] unless items and items.respond_to?(:each)
|
20
|
+
end
|
21
|
+
items
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.output(times, job)
|
25
|
+
enumerate(times).each do |time|
|
26
|
+
enumerate(job.at).each do |at|
|
27
|
+
out = new(time, job.output, at)
|
28
|
+
yield "#{out.time_in_cron_syntax} #{out.task}"
|
29
|
+
end
|
30
|
+
end
|
17
31
|
end
|
18
32
|
|
19
33
|
def time_in_cron_syntax
|
@@ -114,4 +128,4 @@ module Whenever
|
|
114
128
|
end
|
115
129
|
|
116
130
|
end
|
117
|
-
end
|
131
|
+
end
|
data/lib/version.rb
CHANGED
data/test/command_line_test.rb
CHANGED
@@ -11,13 +11,13 @@ class CommandLineTest < Test::Unit::TestCase
|
|
11
11
|
end
|
12
12
|
|
13
13
|
should "output the cron job with identifier blocks" do
|
14
|
-
output = <<-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
output = <<-EXPECTED
|
15
|
+
# Begin Whenever generated tasks for: My identifier
|
16
|
+
#{@task}
|
17
|
+
# End Whenever generated tasks for: My identifier
|
18
|
+
EXPECTED
|
19
19
|
|
20
|
-
assert_equal
|
20
|
+
assert_equal output, @command.send(:whenever_cron)
|
21
21
|
end
|
22
22
|
|
23
23
|
should "write the crontab when run" do
|
@@ -38,49 +38,50 @@ class CommandLineTest < Test::Unit::TestCase
|
|
38
38
|
existing = '# Existing crontab'
|
39
39
|
@command.expects(:read_crontab).at_least_once.returns(existing)
|
40
40
|
|
41
|
-
new_cron = <<-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
41
|
+
new_cron = <<-EXPECTED
|
42
|
+
#{existing}
|
43
|
+
|
44
|
+
# Begin Whenever generated tasks for: My identifier
|
45
|
+
#{@task}
|
46
|
+
# End Whenever generated tasks for: My identifier
|
47
|
+
EXPECTED
|
48
48
|
|
49
|
-
assert_equal
|
49
|
+
assert_equal new_cron, @command.send(:updated_crontab)
|
50
50
|
|
51
|
-
@command.expects(:write_crontab).with(
|
51
|
+
@command.expects(:write_crontab).with(new_cron).returns(true)
|
52
52
|
assert @command.run
|
53
53
|
end
|
54
54
|
|
55
55
|
should "replace an existing block if the identifier matches" do
|
56
|
-
existing = <<-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
new_cron = <<-new_cron
|
70
|
-
# Something
|
71
|
-
|
72
|
-
# Begin Whenever generated tasks for: My identifier
|
73
|
-
#{@task}
|
74
|
-
# End Whenever generated tasks for: My identifier
|
56
|
+
existing = <<-EXISTING_CRON
|
57
|
+
# Something
|
58
|
+
|
59
|
+
# Begin Whenever generated tasks for: My identifier
|
60
|
+
My whenever job that was already here
|
61
|
+
# End Whenever generated tasks for: My identifier
|
62
|
+
|
63
|
+
# Begin Whenever generated tasks for: Other identifier
|
64
|
+
This shouldn't get replaced
|
65
|
+
# End Whenever generated tasks for: Other identifier
|
66
|
+
EXISTING_CRON
|
67
|
+
|
68
|
+
@command.expects(:read_crontab).at_least_once.returns(existing)
|
75
69
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
70
|
+
new_cron = <<-NEW_CRON
|
71
|
+
# Something
|
72
|
+
|
73
|
+
# Begin Whenever generated tasks for: My identifier
|
74
|
+
#{@task}
|
75
|
+
# End Whenever generated tasks for: My identifier
|
76
|
+
|
77
|
+
# Begin Whenever generated tasks for: Other identifier
|
78
|
+
This shouldn't get replaced
|
79
|
+
# End Whenever generated tasks for: Other identifier
|
80
|
+
NEW_CRON
|
80
81
|
|
81
|
-
assert_equal
|
82
|
+
assert_equal new_cron, @command.send(:updated_crontab)
|
82
83
|
|
83
|
-
@command.expects(:write_crontab).with(
|
84
|
+
@command.expects(:write_crontab).with(new_cron).returns(true)
|
84
85
|
assert @command.run
|
85
86
|
end
|
86
87
|
end
|
@@ -97,11 +98,4 @@ class CommandLineTest < Test::Unit::TestCase
|
|
97
98
|
end
|
98
99
|
end
|
99
100
|
|
100
|
-
private
|
101
|
-
|
102
|
-
def unindent(string)
|
103
|
-
indentation = string[/\A\s*/]
|
104
|
-
string.strip.gsub(/^#{indentation}/, "")
|
105
|
-
end
|
106
|
-
|
107
101
|
end
|
@@ -0,0 +1,137 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/test_helper")
|
2
|
+
|
3
|
+
class OutputAtTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
context "weekday at a (single) given time" do
|
6
|
+
setup do
|
7
|
+
@output = Whenever.cron \
|
8
|
+
<<-file
|
9
|
+
every "weekday", :at => '5:02am' do
|
10
|
+
command "blahblah"
|
11
|
+
end
|
12
|
+
file
|
13
|
+
end
|
14
|
+
|
15
|
+
should "output the command using that time" do
|
16
|
+
assert_match '2 5 * * 1-5 blahblah', @output
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context "weekday at a multiple diverse times, via an array" do
|
21
|
+
setup do
|
22
|
+
@output = Whenever.cron \
|
23
|
+
<<-file
|
24
|
+
every "weekday", :at => %w(5:02am 3:52pm) do
|
25
|
+
command "blahblah"
|
26
|
+
end
|
27
|
+
file
|
28
|
+
end
|
29
|
+
|
30
|
+
should "output the commands for both times given" do
|
31
|
+
assert_match '2 5 * * 1-5 blahblah', @output
|
32
|
+
assert_match '52 15 * * 1-5 blahblah', @output
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context "weekday at a multiple diverse times, comma separated" do
|
37
|
+
setup do
|
38
|
+
@output = Whenever.cron \
|
39
|
+
<<-file
|
40
|
+
every "weekday", :at => '5:02am, 3:52pm' do
|
41
|
+
command "blahblah"
|
42
|
+
end
|
43
|
+
file
|
44
|
+
end
|
45
|
+
|
46
|
+
should "output the commands for both times given" do
|
47
|
+
assert_match '2 5 * * 1-5 blahblah', @output
|
48
|
+
assert_match '52 15 * * 1-5 blahblah', @output
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context "weekday at a multiple aligned times" do
|
53
|
+
setup do
|
54
|
+
@output = Whenever.cron \
|
55
|
+
<<-file
|
56
|
+
every "weekday", :at => '5:02am, 3:02pm' do
|
57
|
+
command "blahblah"
|
58
|
+
end
|
59
|
+
file
|
60
|
+
end
|
61
|
+
|
62
|
+
should "output the command using one entry because the times are aligned" do
|
63
|
+
assert_match '2 5,15 * * 1-5 blahblah', @output
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
context "various days at a various aligned times" do
|
68
|
+
setup do
|
69
|
+
@output = Whenever.cron \
|
70
|
+
<<-file
|
71
|
+
every "mon,wed,fri", :at => '5:02am, 3:02pm' do
|
72
|
+
command "blahblah"
|
73
|
+
end
|
74
|
+
file
|
75
|
+
end
|
76
|
+
|
77
|
+
should "output the command using one entry because the times are aligned" do
|
78
|
+
assert_match '2 5,15 * * 1,3,5 blahblah', @output
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context "various days at a various aligned times using a runner" do
|
83
|
+
setup do
|
84
|
+
@output = Whenever.cron \
|
85
|
+
<<-file
|
86
|
+
set :path, '/your/path'
|
87
|
+
every "mon,wed,fri", :at => '5:02am, 3:02pm' do
|
88
|
+
runner "blahblah"
|
89
|
+
end
|
90
|
+
file
|
91
|
+
end
|
92
|
+
|
93
|
+
should "output the runner using one entry because the times are aligned" do
|
94
|
+
assert_match '2 5,15 * * 1,3,5 /your/path/script/runner -e production "blahblah"', @output
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context "various days at a various aligned times using a rake task" do
|
99
|
+
setup do
|
100
|
+
@output = Whenever.cron \
|
101
|
+
<<-file
|
102
|
+
set :path, '/your/path'
|
103
|
+
every "mon,wed,fri", :at => '5:02am, 3:02pm' do
|
104
|
+
rake "blah:blah"
|
105
|
+
end
|
106
|
+
file
|
107
|
+
end
|
108
|
+
|
109
|
+
should "output the rake task using one entry because the times are aligned" do
|
110
|
+
assert_match '2 5,15 * * 1,3,5 cd /your/path && RAILS_ENV=production /usr/bin/env rake blah:blah', @output
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
context "A command every 1.month at very diverse times" do
|
115
|
+
setup do
|
116
|
+
@output = Whenever.cron \
|
117
|
+
<<-file
|
118
|
+
every [1.month, 1.day], :at => 'beginning of the month at 5:02am, june 17th at 2:22pm, june 3rd at 3:33am' do
|
119
|
+
command "blahblah"
|
120
|
+
end
|
121
|
+
file
|
122
|
+
end
|
123
|
+
|
124
|
+
should "output 6 commands since none align" do
|
125
|
+
# The 1.month commands
|
126
|
+
assert_match '2 5 1 * * blahblah', @output
|
127
|
+
assert_match '22 14 17 * * blahblah', @output
|
128
|
+
assert_match '33 3 3 * * blahblah', @output
|
129
|
+
|
130
|
+
# The 1.day commands
|
131
|
+
assert_match '2 5 * * * blahblah', @output
|
132
|
+
assert_match '22 14 * * * blahblah', @output
|
133
|
+
assert_match '33 3 * * * blahblah', @output
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
data/test/output_command_test.rb
CHANGED
@@ -84,4 +84,21 @@ class OutputCommandTest < Test::Unit::TestCase
|
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
|
+
context "An every statement with two commands in it" do
|
88
|
+
setup do
|
89
|
+
@output = Whenever.cron \
|
90
|
+
<<-file
|
91
|
+
every 1.hour do
|
92
|
+
command "first"
|
93
|
+
command "second"
|
94
|
+
end
|
95
|
+
file
|
96
|
+
end
|
97
|
+
|
98
|
+
should "output both commands" do
|
99
|
+
assert_match "0 * * * * first", @output
|
100
|
+
assert_match "0 * * * * second", @output
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
87
104
|
end
|
data/test/output_runner_test.rb
CHANGED
@@ -190,4 +190,20 @@ class OutputRunnerTest < Test::Unit::TestCase
|
|
190
190
|
end
|
191
191
|
end
|
192
192
|
|
193
|
-
|
193
|
+
context "A runner which makes use of double quotes" do
|
194
|
+
setup do
|
195
|
+
@output = Whenever.cron \
|
196
|
+
<<-file
|
197
|
+
set :path, '/my/path'
|
198
|
+
every 2.hours do
|
199
|
+
runner 'Product.import("http://example.com/product.xml")'
|
200
|
+
end
|
201
|
+
file
|
202
|
+
end
|
203
|
+
|
204
|
+
should "output the runner using the original environmnet" do
|
205
|
+
assert_match two_hours + ' /my/path/script/runner -e production "Product.import(\"http://example.com/product.xml\")"', @output
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
end
|
data/whenever.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{whenever}
|
5
|
-
s.version = "0.3.
|
5
|
+
s.version = "0.3.5"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Javan Makhmali"]
|
9
|
-
s.date = %q{2009-
|
9
|
+
s.date = %q{2009-07-13}
|
10
10
|
s.description = %q{Provides clean ruby syntax for defining messy cron jobs and running them Whenever.}
|
11
11
|
s.email = %q{javan@javan.us}
|
12
12
|
s.executables = ["whenever", "wheneverize"]
|
13
13
|
s.extra_rdoc_files = ["bin/whenever", "bin/wheneverize", "CHANGELOG.rdoc", "lib/base.rb", "lib/command_line.rb", "lib/job_list.rb", "lib/job_types/default.rb", "lib/job_types/rake_task.rb", "lib/job_types/runner.rb", "lib/outputs/cron.rb", "lib/version.rb", "lib/whenever.rb", "README.rdoc"]
|
14
|
-
s.files = ["bin/whenever", "bin/wheneverize", "CHANGELOG.rdoc", "lib/base.rb", "lib/command_line.rb", "lib/job_list.rb", "lib/job_types/default.rb", "lib/job_types/rake_task.rb", "lib/job_types/runner.rb", "lib/outputs/cron.rb", "lib/version.rb", "lib/whenever.rb", "Manifest", "Rakefile", "README.rdoc", "test/command_line_test.rb", "test/cron_test.rb", "test/output_command_test.rb", "test/output_env_test.rb", "test/output_rake_test.rb", "test/output_runner_test.rb", "test/test_helper.rb", "whenever.gemspec"]
|
14
|
+
s.files = ["bin/whenever", "bin/wheneverize", "CHANGELOG.rdoc", "lib/base.rb", "lib/command_line.rb", "lib/job_list.rb", "lib/job_types/default.rb", "lib/job_types/rake_task.rb", "lib/job_types/runner.rb", "lib/outputs/cron.rb", "lib/version.rb", "lib/whenever.rb", "Manifest", "Rakefile", "README.rdoc", "test/command_line_test.rb", "test/cron_test.rb", "test/output_at_test.rb", "test/output_command_test.rb", "test/output_env_test.rb", "test/output_rake_test.rb", "test/output_runner_test.rb", "test/test_helper.rb", "whenever.gemspec"]
|
15
15
|
s.has_rdoc = true
|
16
16
|
s.homepage = %q{http://github.com/javan/whenever}
|
17
17
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Whenever", "--main", "README.rdoc"]
|
@@ -19,7 +19,7 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.rubyforge_project = %q{whenever}
|
20
20
|
s.rubygems_version = %q{1.3.1}
|
21
21
|
s.summary = %q{Provides clean ruby syntax for defining messy cron jobs and running them Whenever.}
|
22
|
-
s.test_files = ["test/command_line_test.rb", "test/cron_test.rb", "test/output_command_test.rb", "test/output_env_test.rb", "test/output_rake_test.rb", "test/output_runner_test.rb", "test/test_helper.rb"]
|
22
|
+
s.test_files = ["test/command_line_test.rb", "test/cron_test.rb", "test/output_at_test.rb", "test/output_command_test.rb", "test/output_env_test.rb", "test/output_rake_test.rb", "test/output_runner_test.rb", "test/test_helper.rb"]
|
23
23
|
|
24
24
|
if s.respond_to? :specification_version then
|
25
25
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: javan-whenever
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Javan Makhmali
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-07-13 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -61,6 +61,7 @@ files:
|
|
61
61
|
- README.rdoc
|
62
62
|
- test/command_line_test.rb
|
63
63
|
- test/cron_test.rb
|
64
|
+
- test/output_at_test.rb
|
64
65
|
- test/output_command_test.rb
|
65
66
|
- test/output_env_test.rb
|
66
67
|
- test/output_rake_test.rb
|
@@ -101,6 +102,7 @@ summary: Provides clean ruby syntax for defining messy cron jobs and running the
|
|
101
102
|
test_files:
|
102
103
|
- test/command_line_test.rb
|
103
104
|
- test/cron_test.rb
|
105
|
+
- test/output_at_test.rb
|
104
106
|
- test/output_command_test.rb
|
105
107
|
- test/output_env_test.rb
|
106
108
|
- test/output_rake_test.rb
|