whenever 0.9.7 → 1.0.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.
@@ -0,0 +1,168 @@
1
+ require 'test_helper'
2
+
3
+ class OutputJobsWithMailtoTest < Whenever::TestCase
4
+ test "defined job with a mailto argument" do
5
+ output = Whenever.cron \
6
+ <<-file
7
+ every 2.hours do
8
+ command "blahblah", mailto: 'someone@example.com'
9
+ end
10
+ file
11
+
12
+ output_without_empty_line = lines_without_empty_line(output.lines)
13
+
14
+ assert_equal 'MAILTO=someone@example.com', output_without_empty_line.shift
15
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah'", output_without_empty_line.shift
16
+ end
17
+
18
+ test "defined job with every method's block and a mailto argument" do
19
+ output = Whenever.cron \
20
+ <<-file
21
+ every 2.hours, mailto: 'someone@example.com' do
22
+ command "blahblah"
23
+ end
24
+ file
25
+
26
+ output_without_empty_line = lines_without_empty_line(output.lines)
27
+
28
+ assert_equal 'MAILTO=someone@example.com', output_without_empty_line.shift
29
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah'", output_without_empty_line.shift
30
+ end
31
+
32
+ test "defined job which overrided mailto argument in the block" do
33
+ output = Whenever.cron \
34
+ <<-file
35
+ every 2.hours, mailto: 'of_the_block@example.com' do
36
+ command "blahblah", mailto: 'overrided_in_the_block@example.com'
37
+ end
38
+ file
39
+
40
+ output_without_empty_line = lines_without_empty_line(output.lines)
41
+
42
+ assert_equal 'MAILTO=overrided_in_the_block@example.com', output_without_empty_line.shift
43
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah'", output_without_empty_line.shift
44
+ end
45
+
46
+ test "defined some jobs with various mailto argument" do
47
+ output = Whenever.cron \
48
+ <<-file
49
+ every 2.hours do
50
+ command "blahblah"
51
+ end
52
+
53
+ every 2.hours, mailto: 'john@example.com' do
54
+ command "blahblah_of_john"
55
+ command "blahblah2_of_john"
56
+ end
57
+
58
+ every 2.hours, mailto: 'sarah@example.com' do
59
+ command "blahblah_of_sarah"
60
+ end
61
+
62
+ every 2.hours do
63
+ command "blahblah_of_martin", mailto: 'martin@example.com'
64
+ command "blahblah2_of_sarah", mailto: 'sarah@example.com'
65
+ end
66
+
67
+ every 2.hours do
68
+ command "blahblah2"
69
+ end
70
+ file
71
+
72
+ output_without_empty_line = lines_without_empty_line(output.lines)
73
+
74
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah'", output_without_empty_line.shift
75
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah2'", output_without_empty_line.shift
76
+
77
+ assert_equal 'MAILTO=john@example.com', output_without_empty_line.shift
78
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah_of_john'", output_without_empty_line.shift
79
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah2_of_john'", output_without_empty_line.shift
80
+
81
+ assert_equal 'MAILTO=sarah@example.com', output_without_empty_line.shift
82
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah_of_sarah'", output_without_empty_line.shift
83
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah2_of_sarah'", output_without_empty_line.shift
84
+
85
+ assert_equal 'MAILTO=martin@example.com', output_without_empty_line.shift
86
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah_of_martin'", output_without_empty_line.shift
87
+ end
88
+
89
+ test "defined some jobs with no mailto argument jobs and mailto argument jobs(no mailto jobs should be first line of cron output" do
90
+ output = Whenever.cron \
91
+ <<-file
92
+ every 2.hours, mailto: 'john@example.com' do
93
+ command "blahblah_of_john"
94
+ command "blahblah2_of_john"
95
+ end
96
+
97
+ every 2.hours do
98
+ command "blahblah"
99
+ end
100
+ file
101
+
102
+ output_without_empty_line = lines_without_empty_line(output.lines)
103
+
104
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah'", output_without_empty_line.shift
105
+
106
+ assert_equal 'MAILTO=john@example.com', output_without_empty_line.shift
107
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah_of_john'", output_without_empty_line.shift
108
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah2_of_john'", output_without_empty_line.shift
109
+ end
110
+
111
+ test "defined some jobs with environment mailto define and various mailto argument" do
112
+ output = Whenever.cron \
113
+ <<-file
114
+ env 'MAILTO', 'default@example.com'
115
+
116
+ every 2.hours do
117
+ command "blahblah"
118
+ end
119
+
120
+ every 2.hours, mailto: 'sarah@example.com' do
121
+ command "blahblah_by_sarah"
122
+ end
123
+
124
+ every 2.hours do
125
+ command "blahblah_by_john", mailto: 'john@example.com'
126
+ end
127
+
128
+ every 2.hours do
129
+ command "blahblah2"
130
+ end
131
+ file
132
+
133
+ output_without_empty_line = lines_without_empty_line(output.lines)
134
+
135
+ assert_equal 'MAILTO=default@example.com', output_without_empty_line.shift
136
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah'", output_without_empty_line.shift
137
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah2'", output_without_empty_line.shift
138
+
139
+ assert_equal 'MAILTO=sarah@example.com', output_without_empty_line.shift
140
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah_by_sarah'", output_without_empty_line.shift
141
+
142
+ assert_equal 'MAILTO=john@example.com', output_without_empty_line.shift
143
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah_by_john'", output_without_empty_line.shift
144
+ end
145
+ end
146
+
147
+ class OutputJobsWithMailtoForRolesTest < Whenever::TestCase
148
+ test "one role requested and specified on the job with mailto argument" do
149
+ output = Whenever.cron roles: [:role1], :string => \
150
+ <<-file
151
+ env 'MAILTO', 'default@example.com'
152
+
153
+ every 2.hours, :roles => [:role1] do
154
+ command "blahblah"
155
+ end
156
+
157
+ every 2.hours, mailto: 'sarah@example.com', :roles => [:role2] do
158
+ command "blahblah_by_sarah"
159
+ end
160
+ file
161
+
162
+ output_without_empty_line = lines_without_empty_line(output.lines)
163
+
164
+ assert_equal 'MAILTO=default@example.com', output_without_empty_line.shift
165
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah'", output_without_empty_line.shift
166
+ assert_nil output_without_empty_line.shift
167
+ end
168
+ end
data/test/test_helper.rb CHANGED
@@ -8,30 +8,40 @@ module Whenever::TestHelpers
8
8
  Whenever::Job.new(options)
9
9
  end
10
10
 
11
- def parse_time(time = nil, task = nil, at = nil)
12
- Whenever::Output::Cron.new(time, task, at).time_in_cron_syntax
11
+ def parse_time(time = nil, task = nil, at = nil, options = {})
12
+ Whenever::Output::Cron.new(time, task, at, options).time_in_cron_syntax
13
13
  end
14
14
 
15
15
  def two_hours
16
16
  "0 0,2,4,6,8,10,12,14,16,18,20,22 * * *"
17
17
  end
18
18
 
19
- def assert_days_and_hours_and_minutes_equals(expected, time)
20
- cron = parse_time(Whenever.seconds(2, :months), 'some task', time)
19
+ def assert_months_and_days_and_hours_and_minutes_equals(expected, time, options = {})
20
+ cron = parse_time(Whenever.seconds(1, :year), 'some task', time, options)
21
+ minutes, hours, days, months = cron.split(' ')
22
+ assert_equal expected, [months, days, hours, minutes]
23
+ end
24
+
25
+ def assert_days_and_hours_and_minutes_equals(expected, time, options = {})
26
+ cron = parse_time(Whenever.seconds(2, :months), 'some task', time, options)
21
27
  minutes, hours, days, _ = cron.split(' ')
22
28
  assert_equal expected, [days, hours, minutes]
23
29
  end
24
30
 
25
- def assert_hours_and_minutes_equals(expected, time)
26
- cron = parse_time(Whenever.seconds(2, :days), 'some task', time)
31
+ def assert_hours_and_minutes_equals(expected, time, options = {})
32
+ cron = parse_time(Whenever.seconds(2, :days), 'some task', time, options)
27
33
  minutes, hours, _ = cron.split(' ')
28
34
  assert_equal expected, [hours, minutes]
29
35
  end
30
36
 
31
- def assert_minutes_equals(expected, time)
32
- cron = parse_time(Whenever.seconds(2, :hours), 'some task', time)
37
+ def assert_minutes_equals(expected, time, options = {})
38
+ cron = parse_time(Whenever.seconds(2, :hours), 'some task', time, options)
33
39
  assert_equal expected, cron.split(' ')[0]
34
40
  end
41
+
42
+ def lines_without_empty_line(lines)
43
+ lines.map { |line| line.chomp }.reject { |line| line.empty? }
44
+ end
35
45
  end
36
46
 
37
47
  Whenever::TestCase.send(:include, Whenever::TestHelpers)
@@ -67,6 +67,38 @@ class CronParseHoursTest < Whenever::TestCase
67
67
  assert_minutes_equals "0", 'midnight'
68
68
  assert_minutes_equals "59", '13:59'
69
69
  end
70
+
71
+ should "parse correctly when given an 'at' with minutes as a Time and custom Chronic options are set" do
72
+ assert_minutes_equals "15", '3:15'
73
+ assert_minutes_equals "15", '3:15', :chronic_options => { :hours24 => true }
74
+ assert_minutes_equals "15", '3:15', :chronic_options => { :hours24 => false }
75
+
76
+ assert_minutes_equals "30", '6:30'
77
+ assert_minutes_equals "30", '6:30', :chronic_options => { :hours24 => true }
78
+ assert_minutes_equals "30", '6:30', :chronic_options => { :hours24 => false }
79
+ end
80
+
81
+ should "parse correctly when given an 'at' with minutes as a Range" do
82
+ assert_minutes_equals "15-30", 15..30
83
+ end
84
+
85
+ should "raise an exception when given an 'at' with an invalid minute value" do
86
+ assert_raises ArgumentError do
87
+ parse_time(Whenever.seconds(1, :hour), nil, 60)
88
+ end
89
+
90
+ assert_raises ArgumentError do
91
+ parse_time(Whenever.seconds(1, :hour), nil, -1)
92
+ end
93
+
94
+ assert_raises ArgumentError do
95
+ parse_time(Whenever.seconds(1, :hour), nil, 0..60)
96
+ end
97
+
98
+ assert_raises ArgumentError do
99
+ parse_time(Whenever.seconds(1, :hour), nil, -1..59)
100
+ end
101
+ end
70
102
  end
71
103
 
72
104
  class CronParseDaysTest < Whenever::TestCase
@@ -90,6 +122,17 @@ class CronParseDaysTest < Whenever::TestCase
90
122
  assert_hours_and_minutes_equals %w(23 59), 'March 21 11:59 pM'
91
123
  end
92
124
 
125
+ should "parse correctly when given an 'at' with hours, minutes as a Time and custom Chronic options are set" do
126
+ # first param is an array with [hours, minutes]
127
+ assert_hours_and_minutes_equals %w(15 15), '3:15'
128
+ assert_hours_and_minutes_equals %w(3 15), '3:15', :chronic_options => { :hours24 => true }
129
+ assert_hours_and_minutes_equals %w(15 15), '3:15', :chronic_options => { :hours24 => false }
130
+
131
+ assert_hours_and_minutes_equals %w(6 30), '6:30'
132
+ assert_hours_and_minutes_equals %w(6 30), '6:30', :chronic_options => { :hours24 => true }
133
+ assert_hours_and_minutes_equals %w(6 30), '6:30', :chronic_options => { :hours24 => false }
134
+ end
135
+
93
136
  should "parse correctly when given an 'at' with hours as an Integer" do
94
137
  # first param is an array with [hours, minutes]
95
138
  assert_hours_and_minutes_equals %w(1 0), 1
@@ -98,6 +141,28 @@ class CronParseDaysTest < Whenever::TestCase
98
141
  assert_hours_and_minutes_equals %w(19 0), 19
99
142
  assert_hours_and_minutes_equals %w(23 0), 23
100
143
  end
144
+
145
+ should "parse correctly when given an 'at' with hours as a Range" do
146
+ assert_hours_and_minutes_equals %w(3-23 0), 3..23
147
+ end
148
+
149
+ should "raise an exception when given an 'at' with an invalid hour value" do
150
+ assert_raises ArgumentError do
151
+ parse_time(Whenever.seconds(1, :day), nil, 24)
152
+ end
153
+
154
+ assert_raises ArgumentError do
155
+ parse_time(Whenever.seconds(1, :day), nil, -1)
156
+ end
157
+
158
+ assert_raises ArgumentError do
159
+ parse_time(Whenever.seconds(1, :day), nil, 0..24)
160
+ end
161
+
162
+ assert_raises ArgumentError do
163
+ parse_time(Whenever.seconds(1, :day), nil, -1..23)
164
+ end
165
+ end
101
166
  end
102
167
 
103
168
  class CronParseMonthsTest < Whenever::TestCase
@@ -132,12 +197,120 @@ class CronParseMonthsTest < Whenever::TestCase
132
197
  assert_days_and_hours_and_minutes_equals %w(23 0 0), 'march 22nd at midnight' # looks like midnight means the next day
133
198
  end
134
199
 
200
+ should "parse correctly when given an 'at' with days, hours, minutes as a Time and custom Chronic options are set" do
201
+ # first param is an array with [days, hours, minutes]
202
+ assert_days_and_hours_and_minutes_equals %w(22 15 45), 'February 22nd 3:45'
203
+ assert_days_and_hours_and_minutes_equals %w(22 15 45), '02/22 3:45'
204
+ assert_days_and_hours_and_minutes_equals %w(22 3 45), 'February 22nd 3:45', :chronic_options => { :hours24 => true }
205
+ assert_days_and_hours_and_minutes_equals %w(22 15 45), 'February 22nd 3:45', :chronic_options => { :hours24 => false }
206
+
207
+ assert_days_and_hours_and_minutes_equals %w(3 8 15), '02/03 8:15'
208
+ assert_days_and_hours_and_minutes_equals %w(3 8 15), '02/03 8:15', :chronic_options => { :endian_precedence => :middle }
209
+ assert_days_and_hours_and_minutes_equals %w(2 8 15), '02/03 8:15', :chronic_options => { :endian_precedence => :little }
210
+
211
+ assert_days_and_hours_and_minutes_equals %w(4 4 50), '03/04 4:50', :chronic_options => { :endian_precedence => :middle, :hours24 => true }
212
+ assert_days_and_hours_and_minutes_equals %w(4 16 50), '03/04 4:50', :chronic_options => { :endian_precedence => :middle, :hours24 => false }
213
+ assert_days_and_hours_and_minutes_equals %w(3 4 50), '03/04 4:50', :chronic_options => { :endian_precedence => :little, :hours24 => true }
214
+ assert_days_and_hours_and_minutes_equals %w(3 16 50), '03/04 4:50', :chronic_options => { :endian_precedence => :little, :hours24 => false }
215
+ end
216
+
135
217
  should "parse correctly when given an 'at' with days as an Integer" do
136
218
  # first param is an array with [days, hours, minutes]
137
219
  assert_days_and_hours_and_minutes_equals %w(1 0 0), 1
138
220
  assert_days_and_hours_and_minutes_equals %w(15 0 0), 15
139
221
  assert_days_and_hours_and_minutes_equals %w(29 0 0), 29
140
222
  end
223
+
224
+ should "parse correctly when given an 'at' with days as a Range" do
225
+ assert_days_and_hours_and_minutes_equals %w(1-7 0 0), 1..7
226
+ end
227
+
228
+ should "raise an exception when given an 'at' with an invalid day value" do
229
+ assert_raises ArgumentError do
230
+ parse_time(Whenever.seconds(1, :month), nil, 32)
231
+ end
232
+
233
+ assert_raises ArgumentError do
234
+ parse_time(Whenever.seconds(1, :month), nil, -1)
235
+ end
236
+
237
+ assert_raises ArgumentError do
238
+ parse_time(Whenever.seconds(1, :month), nil, 0..30)
239
+ end
240
+
241
+ assert_raises ArgumentError do
242
+ parse_time(Whenever.seconds(1, :month), nil, 1..32)
243
+ end
244
+ end
245
+ end
246
+
247
+ class CronParseYearTest < Whenever::TestCase
248
+ should "parse correctly" do
249
+ assert_equal '0 0 1 1 *', parse_time(Whenever.seconds(1, :year))
250
+ end
251
+
252
+ should "parse year with a date and/or time" do
253
+ # should set the day and month to 1 if no date is given
254
+ assert_equal '0 17 1 1 *', parse_time(Whenever.seconds(1, :year), nil, "5pm")
255
+ # should use the date if one is given
256
+ assert_equal '0 2 23 2 *', parse_time(Whenever.seconds(1, :year), nil, "February 23rd at 2am")
257
+ # should use an iteger as the month
258
+ assert_equal '0 0 1 5 *', parse_time(Whenever.seconds(1, :year), nil, 5)
259
+ end
260
+
261
+ should "parse correctly when given an 'at' with days, hours, minutes as a Time" do
262
+ # first param is an array with [months, days, hours, minutes]
263
+ assert_months_and_days_and_hours_and_minutes_equals %w(1 1 3 45), 'January 1st 3:45am'
264
+ assert_months_and_days_and_hours_and_minutes_equals %w(2 11 23 0), 'Feb 11 11PM'
265
+ assert_months_and_days_and_hours_and_minutes_equals %w(3 22 1 1), 'march 22nd at 1:01 am'
266
+ assert_months_and_days_and_hours_and_minutes_equals %w(3 23 0 0), 'march 22nd at midnight' # looks like midnight means the next day
267
+ end
268
+
269
+ should "parse correctly when given an 'at' with days, hours, minutes as a Time and custom Chronic options are set" do
270
+ # first param is an array with [months, days, hours, minutes]
271
+ assert_months_and_days_and_hours_and_minutes_equals %w(2 22 15 45), 'February 22nd 3:45'
272
+ assert_months_and_days_and_hours_and_minutes_equals %w(2 22 15 45), '02/22 3:45'
273
+ assert_months_and_days_and_hours_and_minutes_equals %w(2 22 3 45), 'February 22nd 3:45', :chronic_options => { :hours24 => true }
274
+ assert_months_and_days_and_hours_and_minutes_equals %w(2 22 15 45), 'February 22nd 3:45', :chronic_options => { :hours24 => false }
275
+
276
+ assert_months_and_days_and_hours_and_minutes_equals %w(2 3 8 15), '02/03 8:15'
277
+ assert_months_and_days_and_hours_and_minutes_equals %w(2 3 8 15), '02/03 8:15', :chronic_options => { :endian_precedence => :middle }
278
+ assert_months_and_days_and_hours_and_minutes_equals %w(3 2 8 15), '02/03 8:15', :chronic_options => { :endian_precedence => :little }
279
+
280
+ assert_months_and_days_and_hours_and_minutes_equals %w(3 4 4 50), '03/04 4:50', :chronic_options => { :endian_precedence => :middle, :hours24 => true }
281
+ assert_months_and_days_and_hours_and_minutes_equals %w(3 4 16 50), '03/04 4:50', :chronic_options => { :endian_precedence => :middle, :hours24 => false }
282
+ assert_months_and_days_and_hours_and_minutes_equals %w(4 3 4 50), '03/04 4:50', :chronic_options => { :endian_precedence => :little, :hours24 => true }
283
+ assert_months_and_days_and_hours_and_minutes_equals %w(4 3 16 50), '03/04 4:50', :chronic_options => { :endian_precedence => :little, :hours24 => false }
284
+ end
285
+
286
+ should "parse correctly when given an 'at' with month as an Integer" do
287
+ # first param is an array with [months, days, hours, minutes]
288
+ assert_months_and_days_and_hours_and_minutes_equals %w(1 1 0 0), 1
289
+ assert_months_and_days_and_hours_and_minutes_equals %w(5 1 0 0), 5
290
+ assert_months_and_days_and_hours_and_minutes_equals %w(12 1 0 0), 12
291
+ end
292
+
293
+ should "parse correctly when given an 'at' with month as a Range" do
294
+ assert_months_and_days_and_hours_and_minutes_equals %w(1-3 1 0 0), 1..3
295
+ end
296
+
297
+ should "raise an exception when given an 'at' with an invalid month value" do
298
+ assert_raises ArgumentError do
299
+ parse_time(Whenever.seconds(1, :year), nil, 13)
300
+ end
301
+
302
+ assert_raises ArgumentError do
303
+ parse_time(Whenever.seconds(1, :year), nil, -1)
304
+ end
305
+
306
+ assert_raises ArgumentError do
307
+ parse_time(Whenever.seconds(1, :year), nil, 0..12)
308
+ end
309
+
310
+ assert_raises ArgumentError do
311
+ parse_time(Whenever.seconds(1, :year), nil, 1..13)
312
+ end
313
+ end
141
314
  end
142
315
 
143
316
  class CronParseDaysOfWeekTest < Whenever::TestCase
@@ -191,10 +364,10 @@ class CronParseShortcutsTest < Whenever::TestCase
191
364
  end
192
365
 
193
366
  should "convert time-based shortcuts to times" do
194
- assert_equal '0 0 1 * *', parse_time(:month)
195
- assert_equal '0 0 * * *', parse_time(:day)
196
- assert_equal '0 * * * *', parse_time(:hour)
197
- assert_equal '0 0 1 12 *', parse_time(:year)
367
+ assert_equal '0 0 1 * *', parse_time(:month)
368
+ assert_equal '0 0 * * *', parse_time(:day)
369
+ assert_equal '0 * * * *', parse_time(:hour)
370
+ assert_equal '0 0 1 1 *', parse_time(:year)
198
371
  assert_equal '0 0 1,8,15,22 * *', parse_time(:week)
199
372
  end
200
373
 
@@ -235,6 +408,7 @@ class CronParseRawTest < Whenever::TestCase
235
408
  should "return the same cron sytax" do
236
409
  crons = ['0 0 27-31 * *', '* * * * *', '2/3 1,9,22 11-26 1-6 *', '*/5 6-23 * * *',
237
410
  "*\t*\t*\t*\t*",
411
+ '7 17 * * FRI', '7 17 * * Mon-Fri', '30 12 * Jun *', '30 12 * Jun-Aug *',
238
412
  '@reboot', '@yearly', '@annually', '@monthly', '@weekly',
239
413
  '@daily', '@midnight', '@hourly']
240
414
  crons.each do |cron|
@@ -0,0 +1,142 @@
1
+ require 'test_helper'
2
+
3
+ describe 'Executable' do
4
+ describe 'bin/wheneverize' do
5
+ describe 'ARGV is not empty' do
6
+ describe 'file does not exist' do
7
+ file = '/tmp/this_does_not_exist'
8
+
9
+ it 'prints STDERR' do
10
+ out, err = capture_subprocess_io do
11
+ system('wheneverize', file)
12
+ end
13
+
14
+ assert_empty(out)
15
+ assert_match(/`#{file}' does not exist./, err)
16
+ end
17
+ end
18
+
19
+ describe 'file exists, but not a directory' do
20
+ file = '/tmp/this_is_a_file.txt'
21
+ before { FileUtils.touch(file) }
22
+
23
+ it 'prints STDERR' do
24
+ begin
25
+ out, err = capture_subprocess_io do
26
+ system('wheneverize', file)
27
+ end
28
+
29
+ assert_empty(out)
30
+ assert_match(/`#{file}' is not a directory./, err)
31
+ ensure
32
+ FileUtils.rm(file)
33
+ end
34
+ end
35
+ end
36
+
37
+ describe 'file is a directory, but another param(s) are given as well' do
38
+ file = '/tmp/this_is_a_directory'
39
+ before { FileUtils.mkdir(file) }
40
+
41
+ it 'prints STDERR' do
42
+ begin
43
+ out, err = capture_subprocess_io do
44
+ system('wheneverize', file, 'another', 'parameters')
45
+ end
46
+
47
+ assert_empty(out)
48
+ assert_match(/#{"Too many arguments; please specify only the " \
49
+ "directory to wheneverize."}/, err)
50
+ ensure
51
+ FileUtils.rmdir(file)
52
+ end
53
+ end
54
+ end
55
+ end
56
+
57
+ describe 'ARGV is empty' do
58
+ dir = '.'
59
+ file = 'config/schedule.rb'
60
+ path = File.join(dir, file)
61
+
62
+ describe 'config file already exists' do
63
+ before do
64
+ FileUtils.mkdir(File.dirname(path))
65
+ FileUtils.touch(path)
66
+ end
67
+
68
+ it 'prints STDOUT and STDERR' do
69
+ begin
70
+ out, err = capture_subprocess_io do
71
+ system('wheneverize')
72
+ end
73
+
74
+ assert_match(/\[done\] wheneverized!/, out)
75
+ assert_match(/\[skip\] `#{path}' already exists/, err)
76
+ ensure
77
+ FileUtils.rm_rf(File.dirname(path))
78
+ end
79
+ end
80
+ end
81
+
82
+ describe 'config directory does not exist' do
83
+ it 'prints STDOUT and STDERR' do
84
+ begin
85
+ out, err = capture_subprocess_io do
86
+ system('wheneverize')
87
+ end
88
+
89
+ assert_match(/\[add\] creating `#{File.dirname(path)}'\n/, err)
90
+ assert_match(/\[done\] wheneverized!/, out)
91
+ ensure
92
+ FileUtils.rm_rf(File.dirname(path))
93
+ end
94
+ end
95
+ end
96
+
97
+ describe 'config directory exists, but file does not' do
98
+ before { FileUtils.mkdir(File.dirname(path)) }
99
+
100
+ it 'writes config file and prints STDOUT' do
101
+ begin
102
+ out, err = capture_subprocess_io do
103
+ system('wheneverize')
104
+ end
105
+
106
+ assert_empty(err)
107
+ assert_match(
108
+ /\[add\] writing `#{path}'\n\[done\] wheneverized!/,
109
+ out
110
+ )
111
+
112
+ assert_match((<<-FILE
113
+ # Use this file to easily define all of your cron jobs.
114
+ #
115
+ # It's helpful, but not entirely necessary to understand cron before proceeding.
116
+ # http://en.wikipedia.org/wiki/Cron
117
+
118
+ # Example:
119
+ #
120
+ # set :output, "/path/to/my/cron_log.log"
121
+ #
122
+ # every 2.hours do
123
+ # command "/usr/bin/some_great_command"
124
+ # runner "MyModel.some_method"
125
+ # rake "some:great:rake:task"
126
+ # end
127
+ #
128
+ # every 4.days do
129
+ # runner "AnotherModel.prune_old_records"
130
+ # end
131
+
132
+ # Learn more: http://github.com/javan/whenever
133
+ FILE
134
+ ), IO.read(path))
135
+ ensure
136
+ FileUtils.rm_rf(File.dirname(path))
137
+ end
138
+ end
139
+ end
140
+ end
141
+ end
142
+ end
data/whenever.gemspec CHANGED
@@ -24,4 +24,5 @@ Gem::Specification.new do |s|
24
24
  s.add_development_dependency "rake"
25
25
  s.add_development_dependency "mocha", ">= 0.9.5"
26
26
  s.add_development_dependency "minitest"
27
+ s.add_development_dependency "appraisal"
27
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whenever
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.7
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Javan Makhmali
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-14 00:00:00.000000000 Z
11
+ date: 2019-06-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chronic
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: appraisal
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  description: Clean ruby syntax for writing and deploying cron jobs.
84
98
  email:
85
99
  - javan@javan.us
@@ -91,6 +105,7 @@ extra_rdoc_files: []
91
105
  files:
92
106
  - ".gitignore"
93
107
  - ".travis.yml"
108
+ - Appraisals
94
109
  - CHANGELOG.md
95
110
  - Gemfile
96
111
  - LICENSE
@@ -100,6 +115,9 @@ files:
100
115
  - bin/wheneverize
101
116
  - gemfiles/activesupport4.1.gemfile
102
117
  - gemfiles/activesupport4.2.gemfile
118
+ - gemfiles/activesupport5.0.gemfile
119
+ - gemfiles/activesupport5.1.gemfile
120
+ - gemfiles/activesupport5.2.gemfile
103
121
  - lib/whenever.rb
104
122
  - lib/whenever/capistrano.rb
105
123
  - lib/whenever/capistrano/v2/hooks.rb
@@ -122,11 +140,13 @@ files:
122
140
  - test/functional/output_defined_job_test.rb
123
141
  - test/functional/output_env_test.rb
124
142
  - test/functional/output_jobs_for_roles_test.rb
143
+ - test/functional/output_jobs_with_mailto_test.rb
125
144
  - test/functional/output_redirection_test.rb
126
145
  - test/test_case.rb
127
146
  - test/test_helper.rb
128
147
  - test/unit/capistrano_support_test.rb
129
148
  - test/unit/cron_test.rb
149
+ - test/unit/executable_test.rb
130
150
  - test/unit/job_test.rb
131
151
  - whenever.gemspec
132
152
  homepage: https://github.com/javan/whenever
@@ -149,7 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
149
169
  version: '0'
150
170
  requirements: []
151
171
  rubyforge_project:
152
- rubygems_version: 2.5.1
172
+ rubygems_version: 2.7.3
153
173
  signing_key:
154
174
  specification_version: 4
155
175
  summary: Cron jobs in ruby.
@@ -160,7 +180,9 @@ test_files:
160
180
  - test/functional/output_defined_job_test.rb
161
181
  - test/functional/output_env_test.rb
162
182
  - test/functional/output_jobs_for_roles_test.rb
183
+ - test/functional/output_jobs_with_mailto_test.rb
163
184
  - test/functional/output_redirection_test.rb
164
185
  - test/unit/capistrano_support_test.rb
165
186
  - test/unit/cron_test.rb
187
+ - test/unit/executable_test.rb
166
188
  - test/unit/job_test.rb