chronic_cron 0.6.0 → 0.7.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d2aa1ee213393540b1f82770bdd33cfa00443a7d0c1d23571f46450cb51c51eb
4
- data.tar.gz: ab48a734ac469da60395a23e6c4587ff1af4026801e8dbe46e0b20c4ff88884e
3
+ metadata.gz: 74e6c6b5e6aafa964b67958982e125192dff761eb9368ed437918ba129f579d3
4
+ data.tar.gz: c261b87089908765d850751596efc61d41fff9a963096a46a592db5b58d374a4
5
5
  SHA512:
6
- metadata.gz: f5f34e35492918a0709184ba47b5a6dfb113bbd6f3e4f9b03bc7258c1805c261a45cc6f67f0af57e8d69743cdb574b0a4ff2047d3a3903b232d29768ea5cd06c
7
- data.tar.gz: bf88b16ff4fa13c1fa5efaa367821b1afabe194be4927cdda20c98daf8fbd23f5111f38f6d86164a406331a53958d1b6564e5f8b948ecf9a793450a676160f9b
6
+ metadata.gz: 6aeca1b4badf614977581b0dfbfc246746b483f2c4b69fe212e3e066b529019d56a2ad45e215868e7e346d91f70e5fc599cdcb2f1f2064e6f543a2d265825fa4
7
+ data.tar.gz: 4e62f03e153be58292d68512abd4a338f2337b9443b9fe5dbda504daf39f6b7b45646cf2410b19c3ca0536a1e9575bc716a130f330419341f45fd29bbe9ed836
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/chronic_cron.rb CHANGED
@@ -8,64 +8,82 @@ require 'cron_format'
8
8
  require 'timetoday'
9
9
 
10
10
 
11
+ MONTHS = (Date::MONTHNAMES[1..-1] + Date::ABBR_MONTHNAMES[1..-1]).join('|')
12
+
11
13
  class ChronicCron
12
14
  include AppRoutes
13
15
  using ColouredText
14
-
15
- attr_reader :to_expression
16
-
16
+
17
+ attr_reader :to_expression
18
+
19
+ def self.parse(s)
20
+ r = new(s)
21
+ r.valid? ? r : nil
22
+ end
23
+
17
24
  def initialize(s, now=Time.now, log: nil, debug: false)
18
-
25
+
19
26
  @now, @log, @debug = now, log, debug
20
-
21
- puts ('@now: ' + @now.inspect).debug if @debug
22
-
27
+
28
+ puts ('@now: ' + @now.inspect).debug if @debug
29
+
23
30
  super()
24
31
  @params = {input: s}
25
32
  expressions(@params)
26
33
 
27
34
  if s =~ /^tomorrow/i then
28
-
35
+
29
36
  s.sub!(/^tomorrow /i,'')
30
37
  expression = find_expression(s.downcase\
31
38
  .sub(/^(?:is|on|at|from|starting)\s+/,''))
32
- @cf = CronFormat.new(expression, now)
39
+ @cf = CronFormat.new(expression, now)
33
40
  @cf.adjust_date @cf.to_time - (24 * 60 * 60)
34
-
41
+
35
42
  else
36
-
43
+
37
44
  expression = find_expression(s.downcase\
38
45
  .sub(/^(?:on|at|from|starting)\s+/,''))
39
- @cf = CronFormat.new(expression, now)
40
-
46
+ puts 'expression: ' + expression.inspect if @debug
47
+ return unless expression
48
+ puts 'now: ' + now.inspect if @debug
49
+ @cf = CronFormat.new(expression, now)
50
+
41
51
  end
42
-
52
+
43
53
 
44
54
  @to_expression = @cf.to_expression
45
55
 
46
56
  end
47
-
48
- def inspect()
49
- "#<ChronicCron:%s @to_expression=\"%s\", @to_time=\"%s\">" %
57
+
58
+ def inspect()
59
+ if @cf then
60
+ "#<ChronicCron:%s @to_expression=\"%s\", @to_time=\"%s\">" %
50
61
  [self.object_id, @to_expression, @cf.to_time]
62
+ else
63
+ "#<ChronicCron:%s >" % [self.object_id]
64
+ end
51
65
  end
52
-
66
+
53
67
  def next()
54
68
  @cf.next
55
69
  end
56
-
57
- def to_date()
70
+
71
+ def to_date()
58
72
  @cf.to_time.to_date
59
73
  end
60
-
74
+
61
75
  def to_time()
62
76
  @cf.to_time
63
77
  end
64
-
78
+
79
+ def valid?
80
+ @cf.respond_to? :to_time
81
+ end
82
+
65
83
  protected
66
84
 
67
- def expressions(params)
68
-
85
+ def expressions(params)
86
+
69
87
  log = @log
70
88
 
71
89
  r = '[0-9\*,\?\/\-]+'
@@ -73,83 +91,83 @@ class ChronicCron
73
91
 
74
92
  # e.g. 00 5 15 * *
75
93
  get /(#{r}\s+#{r}\s+#{r}\s#{r}\s#{r})(\s#{r})?/ do
76
-
94
+
77
95
  puts 'ChronicCron#expressions 10' if @debug
78
-
96
+
79
97
  "%s%s" % params[:captures]
80
98
  end
81
99
 
82
100
  # e.g. 9:00-18:00 every day
83
101
  get /(\d{1,2}):(\d{1,2})-(\d{1,2}):\d{1,2}\s+#{daily}/ do
84
-
102
+
85
103
  puts 'ChronicCron#expressions 20' if @debug
86
-
104
+
87
105
  "%s %s-%s * * *" % params[:captures].values_at(1,0,2)
88
- end
106
+ end
89
107
 
90
108
  # e.g. every 30mins from 8:00am until 8:00pm mon-fri
91
- get /every\s+(\d+)\s*mins\s+from\s+(\d{1,2}):(\d{1,2})([ap]m)(?:\s+until\s+|\s*-\s*)(\d{1,2}):\d{1,2}([ap]m)\s+(\w+\-\w+)/x do
109
+ get /every\s+(\d+)\s*mins\s+from\s+(\d{1,2}):(\d{1,2})([ap]m)(?:\s+until\s+|\s*-\s*)(\d{1,2}):\d{1,2}([ap]m)\s+(\w+\-\w+)/x do
92
110
  |interval_mins, r_hrs1, mins1, meridiem1, r_hrs2, meridiem2, wdays|
93
111
 
94
112
  hrs1 = meridiem1 == 'pm' ? r_hrs1.to_i + 12 : r_hrs1
95
113
  hrs2 = meridiem2 == 'pm' ? r_hrs2.to_i + 12 : r_hrs2
96
-
114
+
97
115
  puts 'ChronicCron#expressions 30' if @debug
98
-
116
+
99
117
  "%s/%s %s-%s * * %s" % [mins1.to_i, interval_mins, hrs1, hrs2, wdays]
100
- end
101
-
118
+ end
119
+
102
120
  # e.g. every 30mins from 8:00am until 8:00pm every day
103
- get /every\s+(\d+)\s*mins\s+from\s+(\d{1,2}):(\d{1,2})([ap]m)(?:\s+until\s+|\s*-\s*)(\d{1,2}):\d{1,2}([ap]m)\s+#{daily}/ do
121
+ get /every\s+(\d+)\s*mins\s+from\s+(\d{1,2}):(\d{1,2})([ap]m)(?:\s+until\s+|\s*-\s*)(\d{1,2}):\d{1,2}([ap]m)\s+#{daily}/ do
104
122
  |interval_mins, r_hrs1, mins1, meridiem1, r_hrs2, meridiem2|
105
123
  hrs1 = meridiem1 == 'pm' ? r_hrs1.to_i + 12 : r_hrs1
106
124
  hrs2 = meridiem2 == 'pm' ? r_hrs2.to_i + 12 : r_hrs2
107
-
125
+
108
126
  puts 'ChronicCron#expressions 40' if @debug
109
-
127
+
110
128
  "%s/%s %s-%s * * *" % [mins1.to_i, interval_mins, hrs1, hrs2]
111
- end
112
-
129
+ end
130
+
113
131
  # e.g. 8:00am until 8:00pm every day
114
- get /(\d{1,2}):(\d{1,2})([ap]m)(?:\s+until\s+|\s*-\s*)(\d{1,2}):\d{1,2}([ap]m)\s+#{daily}/ do
132
+ get /(\d{1,2}):(\d{1,2})([ap]m)(?:\s+until\s+|\s*-\s*)(\d{1,2}):\d{1,2}([ap]m)\s+#{daily}/ do
115
133
  |r_hrs1, mins1, meridiem1, r_hrs2, meridiem2|
116
134
  hrs1 = meridiem1 == 'pm' ? r_hrs1.to_i + 12 : r_hrs1
117
135
  hrs2 = meridiem2 == 'pm' ? r_hrs2.to_i + 12 : r_hrs2
118
-
136
+
119
137
  puts 'ChronicCron#expressions 50' if @debug
120
-
138
+
121
139
  "%s %s-%s * * *" % [mins1.to_i, hrs1, hrs2]
122
- end
140
+ end
123
141
 
124
142
  # e.g. 10:15am every day
125
143
  get /(\d{1,2}):?(\d{1,2})([ap]m)?\s+#{daily}/ do |raw_hrs, mins, meridiem|
126
144
  hrs = in24hrs(raw_hrs, meridiem)
127
-
145
+
128
146
  puts 'ChronicCron#expressions 60' if @debug
129
-
147
+
130
148
  "%s %s * * *" % [mins.to_i, hrs]
131
149
  end
132
150
 
133
151
  # e.g. at 7:30am Monday to Friday
134
- get /(\d{1,2}):?(\d{1,2})([ap]m)?\s+(\w+) to (\w+)/ do
152
+ get /(\d{1,2}):?(\d{1,2})([ap]m)?\s+(\w+) to (\w+)/ do
135
153
  |raw_hrs, mins, meridiem, wday1, wday2|
136
154
  hrs = in24hrs(raw_hrs, meridiem)
137
-
155
+
138
156
  puts 'ChronicCron#expressions 70' if @debug
139
-
157
+
140
158
  "%s %s * * %s-%s" % [mins.to_i, hrs , wday1, wday2]
141
- end
142
-
159
+ end
160
+
143
161
  # e.g. at 11:00 and 16:00 on every day
144
162
  get /(\d{1,2}):?(\d{1,2}) and (\d{1,2}):?\d{1,2} (?:on )?#{daily}/ do
145
-
163
+
146
164
  puts 'ChronicCron#expressions 80' if @debug
147
-
165
+
148
166
  "%s %s,%s * * *" % params[:captures].values_at(1,0,2)
149
167
  end
150
168
 
151
-
152
- get('hourly') {'0 * * * *'}
169
+
170
+ get('hourly') {'0 * * * *'}
153
171
  get('daily') {'0 0 * * *'}
154
172
  get('midnight') {'0 0 * * *'}
155
173
  get('weekly') {'0 0 * * 0'}
@@ -158,44 +176,44 @@ class ChronicCron
158
176
  get('annually') {'0 0 1 1 *'}
159
177
 
160
178
  weekday = '((?:mon|tue|wed|thu|fri|sat|sun)\w*)'
161
-
179
+
162
180
  # e.g. at 10:30pm on every Monday
163
- get /(\d{1,2}):?(\d{1,2})([ap]m)?\s+(?:on )?every #{weekday}/i do
164
- |raw_hrs, mins, meridiem, wday|
181
+ get /(\d{1,2}):?(\d{1,2})([ap]m)?\s+(?:on )?every #{weekday}/i do
182
+ |raw_hrs, mins, meridiem, wday|
165
183
  hrs = in24hrs(raw_hrs, meridiem)
166
-
184
+
167
185
  puts 'ChronicCron#expressions 90' if @debug
168
-
186
+
169
187
  "%s %s * * %s" % [mins, hrs , wday]
170
188
  end
171
-
189
+
172
190
  # e.g. at 10pm on every Monday
173
- get /(\d{1,2})([ap]m)?\s+(?:on )?every #{weekday}/i do
191
+ get /(\d{1,2})([ap]m)?\s+(?:on )?every #{weekday}/i do
174
192
  |raw_hrs, meridiem, wday|
175
193
  hrs = in24hrs(raw_hrs, meridiem)
176
-
194
+
177
195
  puts 'ChronicCron#expressions 100' if @debug
178
-
196
+
179
197
  "0 %s * * %s" % [hrs , wday]
180
- end
181
-
198
+ end
199
+
182
200
  # e.g. every 10 minutes
183
201
  get(/every (\d{1,2}) min(?:ute)?s?/){|mins| "*/%s * * * *" % [mins]}
184
202
  get(/every min(?:ute)?/){"* * * * *"}
185
-
203
+
186
204
  # e.g. every 2 hours
187
205
  get(/every (\d{1,2}) h(?:ou)?rs?/){|hrs| "* */%s * * *" % [hrs]}
188
206
  get(/every hour/){ "0 * * * *"}
189
-
207
+
190
208
  # e.g. every 2 days
191
209
  get(/every (\d{1,2}) days?/) do |days|
192
-
210
+
193
211
  log.info 'ChronicCron/expressions/get: r130' if log
194
212
  puts 'ChronicCron#expressions 150' if @debug
195
-
213
+
196
214
  "* * */%s * *" % [days]
197
215
  end
198
-
216
+
199
217
  get(/#{daily}/){ "0 0 * * *"}
200
218
 
201
219
  get /(?:any\s?time)?(?: today)? between (\S+) and (\S+)/ do |s1, s2|
@@ -206,12 +224,12 @@ class ChronicCron
206
224
  t
207
225
  end
208
226
  )
209
-
227
+
210
228
  puts 'ChronicCron#expressions 170' if @debug
211
-
229
+
212
230
  "%s %s %s %s *" % TimeToday.between(s1,s2).to_a[1..4]
213
231
  end
214
-
232
+
215
233
  get /any\s?time today/ do
216
234
  self.instance_eval %q(
217
235
  def next()
@@ -221,10 +239,10 @@ class ChronicCron
221
239
  end
222
240
  )
223
241
  puts 'ChronicCron#expressions 180' if @debug
224
-
242
+
225
243
  "%s %s %s %s *" % TimeToday.future.to_a[1..4]
226
244
  end
227
-
245
+
228
246
  # e.g. first thursday of each month at 7:30pm
229
247
  nday = '(\w+(?:st|rd|nd))\s+' + weekday + '\s+'
230
248
  get /#{nday}(?:of\s+)?(?:the|each|every)\s+month(?:\s+at\s+([^\s]+))?/i do
@@ -233,9 +251,9 @@ class ChronicCron
233
251
  month = @now.month
234
252
 
235
253
  h = {
236
- /first|1st/i => '1-7',
237
- /second|2nd/i => '8-14',
238
- /third|3rd/i => '15-21',
254
+ /first|1st/i => '1-7',
255
+ /second|2nd/i => '8-14',
256
+ /third|3rd/i => '15-21',
239
257
  /fourth|4th|last/i => '22-28'
240
258
  }
241
259
 
@@ -246,101 +264,114 @@ class ChronicCron
246
264
  raw_time ||= '6:00am'
247
265
 
248
266
  minute, hour = Chronic.parse(raw_time).to_a[1,2]
249
-
267
+
250
268
  puts 'ChronicCron#expressions 190' if @debug
251
-
269
+
252
270
  "%s %s %s * %s" % [minute, hour, day_range, wday]
253
271
 
254
272
  end
255
-
273
+
256
274
  # e.g. every tuesday at 4pm
257
275
  get /every\s+#{weekday}\s+(?:at\s+)?(\d{1,2})([ap]m)/i do
258
276
  |wday, raw_hrs, meridiem, |
259
277
 
260
- hrs = in24hrs(raw_hrs, meridiem)
261
-
278
+ hrs = in24hrs(raw_hrs, meridiem)
279
+
262
280
  puts 'ChronicCron#expressions 200' if @debug
263
-
281
+
264
282
  "0 %s * * %s" % [hrs , Date::DAYNAMES.index(wday.capitalize)]
265
283
  end
266
-
267
-
284
+
285
+
268
286
  # e.g. last sunday of March at 1am
269
-
287
+
270
288
  get /last (#{Date::DAYNAMES.join('|')}) (?:of|in) \
271
- (#{Date::MONTHNAMES[1..-1].join('|')})\s+at\s+(\d{1,2})(?::(\d{1,2}))?\
289
+ (#{MONTHS})\s+at\s+(\d{1,2})(?::(\d{1,2}))?\
272
290
  ([ap]m)/i do |day, month, raw_hrs, mins, meridiem|
273
291
 
274
292
  now = Chronic.parse(month, now: @now)
275
293
  puts ('now: ' + now.inspect).debug if @debug
276
-
294
+
277
295
  d = last_wdayofmonth(day, now)
278
296
  puts ('d: ' + d.inspect).debug if @debug
279
297
 
280
298
  hrs = in24hrs(raw_hrs, meridiem)
281
-
299
+
282
300
  puts 'ChronicCron#expressions 210' if @debug
283
-
301
+
284
302
  "%s %s %s %s *" % [mins.to_i, hrs, d.day, d.month]
285
303
  end
286
-
304
+
287
305
  # e.g. last sunday of October
288
-
306
+
289
307
  get /last (#{Date::DAYNAMES.join('|')}) (?:of|in) \
290
- (#{Date::MONTHNAMES[1..-1].join('|')})/i do |day, month|
308
+ (#{MONTHS})/i do |day, month|
291
309
 
292
310
  now = Chronic.parse(month, now: @now)
293
311
 
294
312
  d = last_wdayofmonth(day, now)
295
-
313
+
296
314
  puts 'ChronicCron#expressions 220' if @debug
297
-
315
+
298
316
  "* * %s %s *" % [d.day, d.month]
299
317
  end
300
-
318
+
301
319
 
302
320
  # e.g. every 2nd tuesday at 4:40pm
303
- get /every\s+2nd\s+#{weekday}\s+at\s+(\d{1,2})(?::(\d{1,2}))?([ap]m)/i do
304
- |wday, raw_hrs, mins, meridiem, |
321
+ #
322
+ get /every\s+2nd\s+#{weekday}\s+at\s+(\d{1,2})(?::(\d{1,2}))?([ap]m)(.*)/i do
323
+ |wday, raw_hrs, mins, meridiem, remaining|
324
+
325
+ log.info 'ChronicCron/expressions/get: r225' if log
326
+ puts 'ChronicCron#expressions 225' if @debug
327
+
305
328
  hrs = in24hrs(raw_hrs, meridiem)
306
- log.info 'ChronicCron/expressions/get: r230' if log
307
-
308
- puts 'ChronicCron#expressions 220' if @debug
309
-
310
- "%s %s * * %s/2" % [mins.to_i, hrs , wday]
311
- end
312
-
329
+ puts 'remaining: ' + remaining.inspect if @debug
330
+
331
+ if remaining =~ /#{MONTHS}/i then
332
+
333
+ t = Chronic.parse(remaining.gsub(/[\(\)]/,''), :now => @now)
334
+ "%s %s * * %s/2" % [mins.to_i, hrs, t.wday]
335
+
336
+ else
337
+
338
+ "%s %s * * %s/2" % [mins.to_i, hrs , wday]
339
+
340
+ end
341
+
342
+ end
343
+
313
344
  # e.g. every tuesday at 4:40pm
314
345
  get /every\s+#{weekday}\s+at\s+(\d{1,2}):(\d{1,2})([ap]m)/i do
315
346
  |wday, raw_hrs, mins, meridiem, |
316
347
  hrs = in24hrs(raw_hrs, meridiem)
317
-
348
+
318
349
  puts 'ChronicCron#expressions 230' if @debug
319
-
350
+
320
351
  "%s %s * * %s" % [mins, hrs , wday]
321
- end
322
-
352
+ end
353
+
323
354
 
324
355
  # e.g. every 2nd week at 6am starting from 7th Jan
325
356
  get /every 2nd week\s+at\s+([^\s]+)/ do |raw_time|
326
357
 
327
358
  t = Chronic.parse(raw_time, :now => @now)
328
- log.info 'ChronicCron/expressions/get: r250' if log
359
+ log.info 'ChronicCron/expressions/get: r240' if log
329
360
  puts 'ChronicCron#expressions 240' if @debug
330
-
361
+
331
362
  "%s %s * * %s/2" % [t.min,t.hour,t.wday]
332
363
 
333
- end
334
-
335
-
364
+ end
365
+
366
+
336
367
  # e.g. every 2nd monday
337
368
  get /every 2nd #{weekday}/ do |wday|
338
369
 
339
370
  puts 'ChronicCron#expressions 250' if @debug
340
371
  "* * * * %s/2" % [wday]
341
372
 
342
- end
343
-
373
+ end
374
+
344
375
 
345
376
  # e.g. every 2 weeks (starting 7th Jan 2020)
346
377
  get /^every (\w+) weeks \(starting ([^\)]+)/ do |interval, raw_date|
@@ -349,19 +380,19 @@ class ChronicCron
349
380
  puts ('raw_date: ' + raw_date.inspect).debug
350
381
  puts ('now: ' + @now.inspect).debug
351
382
  end
352
-
383
+
353
384
  t = raw_date ? Chronic.parse(raw_date, :now => @now) : @now
354
385
  t += WEEK * interval.to_i until t > @now
355
386
  mins, hrs = t.to_a.values_at(1,2)
356
-
357
- log.info 'ChronicCron/expressions/get: r260' if log
387
+
388
+ log.info 'ChronicCron/expressions/get: r260' if log
358
389
  if @debug then
359
390
  puts 'ChronicCron#expressions 260'
360
391
  puts ('t: ' + t.inspect).debug
361
392
  end
362
393
 
363
394
  "%s %s * * %s/%s" % [mins, hrs, t.wday, interval]
364
- end
395
+ end
365
396
 
366
397
  # e.g. every 2 weeks at 6am starting from 7th Jan
367
398
  get /^every (\w+) weeks(?:\s+at\s+([^\s]+))?/ do |interval, raw_time|
@@ -370,19 +401,19 @@ class ChronicCron
370
401
  puts ('raw_time: ' + raw_time.inspect).debug
371
402
  puts ('now: ' + @now.inspect).debug
372
403
  end
373
-
404
+
374
405
  t = raw_time ? Chronic.parse(raw_time, :now => @now) : @now
375
406
  t += WEEK * interval.to_i until t > @now
376
407
  mins, hrs = t.to_a.values_at(1,2)
377
-
378
- log.info 'ChronicCron/expressions/get: r270' if log
408
+
409
+ log.info 'ChronicCron/expressions/get: r270' if log
379
410
  if @debug then
380
411
  puts 'ChronicCron#expressions 270'
381
412
  puts ('t: ' + t.inspect).debug
382
413
  end
383
414
 
384
415
  "%s %s * * %s/%s" % [mins, hrs, t.wday, interval]
385
- end
416
+ end
386
417
 
387
418
 
388
419
  # e.g. starting 05-Aug@15:03 every 2 weeks
@@ -391,19 +422,19 @@ class ChronicCron
391
422
  t = Chronic.parse(raw_date, :now => @now)
392
423
  mins, hrs = t.to_a.values_at(1,2)
393
424
  puts 'ChronicCron#expressions 280' if @debug
394
-
425
+
395
426
  "%s %s * * %s/%s" % [mins, hrs, t.wday, interval]
396
- end
397
-
427
+ end
428
+
398
429
  # e.g. from 05-Aug@12:34 fortnightly
399
430
  get /(.*)\s+(?:biweekly|fortnightly)/ do |raw_date|
400
431
 
401
432
  t = Chronic.parse(raw_date, :now => @now)
402
433
  mins, hrs, day, month, year = t.to_a.values_at(1,2,3,4,5)
403
434
  puts 'ChronicCron#expressions 290' if @debug
404
-
435
+
405
436
  "%s %s %s %s %s/2 %s" % [mins, hrs, day, month, t.wday, year]
406
- end
437
+ end
407
438
 
408
439
  # e.g. from 06-Aug@1pm every week
409
440
  get /(.*)\s+(?:weekly|every week)/ do |raw_date|
@@ -411,52 +442,56 @@ class ChronicCron
411
442
  t = Chronic.parse(raw_date, :now => @now)
412
443
  mins, hrs, day, month, year = t.to_a.values_at(1,2,3,4,5)
413
444
  puts 'ChronicCron#expressions 300' if @debug
414
-
445
+
415
446
  "%s %s %s %s %s %s" % [mins, hrs, day, month, t.wday, year]
416
- end
417
-
447
+ end
448
+
418
449
  # e.g. every sunday
419
450
  get /every\s+#{weekday}/ do |wday|
420
-
451
+
421
452
  puts 'ChronicCron#expressions 310' if @debug
422
-
453
+
423
454
  "0 12 * * %s" % wday
424
- end
425
-
455
+ end
456
+
426
457
  # e.g. 04-Aug@12:34
427
458
  get '*' do
428
459
 
429
460
  t = Chronic.parse(params[:input], :now => @now)
430
461
  puts 'ChronicCron#expressions 330' if @debug
431
-
432
- "%s %s %s %s * %s" % t.to_a.values_at(1,2,3,4,5)
462
+ puts 't: ' + t.inspect if @debug
463
+ if t then
464
+ "%s %s %s %s * %s" % t.to_a.values_at(1,2,3,4,5)
465
+ end
433
466
  end
434
467
 
435
468
  def in24hrs(raw_hrs, meridiem)
436
469
 
470
+ puts 'raw_hrs: ' + raw_hrs.inspect if @debug
471
+
437
472
  hrs = if meridiem == 'pm' then
438
- raw_hrs.to_i + 12
473
+ raw_hrs.to_i < 12 ? raw_hrs.to_i + 12 : raw_hrs.to_i
439
474
  else
440
475
  raw_hrs.to_i == 12 ? 0 : raw_hrs
441
476
  end
442
- end
477
+ end
443
478
  end
444
-
445
-
479
+
480
+
446
481
  alias find_expression run_route
447
-
482
+
448
483
  private
449
-
484
+
450
485
  def last_wdayofmonth(day, now)
451
-
486
+
452
487
  wday = Date::DAYNAMES.map(&:downcase).index(day)
453
488
 
454
489
  d2 = Date.today
455
490
  date = Date.civil(now.year, now.month, -1)
456
- date -= 1 until date.wday == wday
457
-
491
+ date -= 1 until date.wday == wday
492
+
458
493
  return date
459
-
494
+
460
495
  end
461
-
496
+
462
497
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chronic_cron
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -11,31 +11,31 @@ cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
13
  MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
- YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMTkwOTEwMTczMDU2WhcN
15
- MjAwOTA5MTczMDU2WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
- cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQD+oxz1
17
- IhGNszjzVKXOIivImj03s3bNue3UNjX7PPAXpDo5zP8uAGMGcdqjcNzgUziuSnuP
18
- 603LcDLmVqjAxaGoCq9nLMXij095YbDN4MZDBzXJw5tsb3jJXC43GWNCnFrO8xKP
19
- PS2JtF8ou4Cgc+D0rzNvuW/iEDoVrPLAbCI2e3ANmcf7BQCaSETdz7iOZJUPLuKU
20
- 4PO25XNVVLncZ5t6Y7XLzKPZj2szaLKlHD8DolyF6+g8JA41QKn4KPsdGj9zyFu3
21
- BFy7PDGeBRtCWyngl5jwyWQH/xZMGFw619pM/fAVneQF/Bh+IPwp+XU5cw3e7VAG
22
- vOd9uAERpGOBNS4Oyh4CDoRK9Er3psySKWv3tGBdcRSfaPzYxaJbQ+KCOEFYgMdK
23
- Sj1jMv+JRZq7WfZVn4Zw9ZUjmjVD0vrkGwQIhAe8gpEo2goVRtCVleZhl2mZB5sc
24
- 0KkOCDJ3oLXBtMB3WmvYvxO1hqBjK5iQ9ZsQj48b2UVu6PhMcVtk66i0qTMCAwEA
25
- AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUhUUXcJrt
26
- tdgHkH3nDEQuZnFvxkYwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjEwMjIzMTIwMDUxWhcN
15
+ MjIwMjIzMTIwMDUxWjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCjirUC
17
+ k7cKAs7ZfV4qGlKIc5eRA/6/kpqIpAb8+YDEIpS5shCWGrGfwRczcO2imBsEcpBb
18
+ Lj7T0ol0tw0124awanj9q7E+8eJSPwvNrP891onsuJz9VBclOWHFAk0hNrJNGMYE
19
+ feeUY+LJO2DL8lVZctqMQsNtlmFq3ISm0fE9U8Uy8vaSd8ocBoZNE+ttRcVR69/R
20
+ bSZJOa+b2SizTJyXs+ynE0MLrQI0Upk6Ze2Pha3Mkuzn9JN5ylPmF7u+Ylh8NtM8
21
+ C1s0tWl91nN45k3TJQzJCjtBoobl30Fp+mRc36BttLhVs6DNjgNTSWWISbw6yWun
22
+ yYi5nb+AgbwZIGUGeuXUpiWgPR9IKYw63LQCYUkLqhMzg91Yb7xZrvSi/CkqzE8I
23
+ ApelfP+IlFac/Sue0BL+YOqCgT1UMY7S73jjInppGYQh/FiTElfyEKZallSWV5BI
24
+ liIktwj2xfFTY+gMTVkOOdPfxluHYfY26zvgy2Amgtb+quzrvYK2n0wndn8CAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUYicTvE9t
26
+ tQvwBoKkP+W51JemQaUwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
27
  c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
- BgkqhkiG9w0BAQsFAAOCAYEAflvokfPPdUQKrl2dENm7i9AzvnwMDE5AsQyU/+u0
29
- RHo139tQZr5D55LxgkpcQx4M9RCygV3Jv+psxI4s/Utpai2fSzUe+HcZ5nbYDtQ1
30
- rVRTUWel2UELJfJfUvpvZkGP80YS2uzM/VRnGBfs5/cQabw3FeC10+/Rb6hkxhaR
31
- bkNt7UEQqcRRJ3+xktAA63KM1cgfKvjLdw8ZRyZ23rC6DRiPXqLnF9Ec1IM9iuf3
32
- Khw3BV/KbJ0V/4adcv6w59Yt8QipeCiP8rC6oMVVUJ64zhyLqwOiG7gUndpz2+Fj
33
- kVwMY2OIYwSnx8RzxhRJO9ubYwR8nj6hVlZFCeNqwy7KLfohyuTIrgkfvHGlMEMA
34
- /IOiCQ02XiDAWeE1CekdGItDmcotFwoCSuWai+Y4rg+JX1JaJQApPEM0tabWX83n
35
- djri2zyv3s3ucIBaOlC4bOZZiydDSAXx/S/SRGyvA1/ZKgR5h+zu6T2GKcusq7QA
36
- 2O89BwLoEmEP437kjQ6HjyqC
28
+ BgkqhkiG9w0BAQsFAAOCAYEAdbeP6iericAYpjgKrroRdFU+IXPXMwF48IoESx00
29
+ Wa4bqUsy+UnXe8mCP8VA2WK/4QJJKljU2hrS/9FumREOnwF4vPYnLVNJ8nITIpTh
30
+ 1DSDinlg/hhaW/0cUwdJrFttoFqfe4EC32VgZkFlXPCD90ZX3pda6n/I4uvUVujb
31
+ LZgwewGILIRZ2UfV4cPq9gVJRMuL0Dz/9C5t0jjrXuQpScSKyZ814bBv4mvh1xWm
32
+ WEnkNkO9YKsS1PqWy3tVYd2hgfTGXRJk/THYT2Qyj07z2ksG8FzsjhV7VeKZmkBf
33
+ ow4kIK/ches8x97aJ5zbrHwK+he3lLFThcvjAJ0GbwYZrCuDaXIxBj0k+R4lWUpp
34
+ G6VQycIWs0Nb6F5NLLSO4k/mtOduJhmyPWkL3R/KMChXk0hu8xM2Orw1CpipzAX+
35
+ Yot8KuDDSCrW7txuQr8nBdP8TtGBceStvkqoqSGvzsppfoAzykAkc8zujoN1s8d2
36
+ ioSUG4tmSnO/l+mykryWcbFA
37
37
  -----END CERTIFICATE-----
38
- date: 2019-09-10 00:00:00.000000000 Z
38
+ date: 2022-02-02 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: app-routes
@@ -118,7 +118,7 @@ dependencies:
118
118
  - !ruby/object:Gem::Version
119
119
  version: '0.2'
120
120
  description:
121
- email: james@jamesrobertson.eu
121
+ email: digital.robertson@gmail.com
122
122
  executables: []
123
123
  extensions: []
124
124
  extra_rdoc_files: []
@@ -143,7 +143,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
143
143
  - !ruby/object:Gem::Version
144
144
  version: '0'
145
145
  requirements: []
146
- rubygems_version: 3.0.1
146
+ rubyforge_project:
147
+ rubygems_version: 2.7.10
147
148
  signing_key:
148
149
  specification_version: 4
149
150
  summary: Converts a human-readable time (e.g. 10:15 daily) into a cron format (e,g,
metadata.gz.sig CHANGED
Binary file