chronic_cron 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: a5a5a3764414f761efcfacd6c25115ed3d713900
4
- data.tar.gz: db0ccc85847ec1c1ed014693dae7b110fa1f4623
2
+ SHA256:
3
+ metadata.gz: bda37336df08c15781de2f92da0c38856fc99617a2a9981d678a02d6c7cab433
4
+ data.tar.gz: 90f135067b113779770df25b1ff01d58e3052027da8967d31e959a852e670eab
5
5
  SHA512:
6
- metadata.gz: 6466d447e34682edd54ccaf8eb0991e29c2ec350a4143467817d803451839f3081117749e62cc0a693fdf55c8e8df92c61c8e4658afcf38a5ab913f677c2bf06
7
- data.tar.gz: 4936d51bd6e7e0d03a920821e28d8bfbb09f4f451376412323300f2c208a05fd515d5eb65de6f2be14da245a5997396223a829a6b1656846a4ee8b75c1471c89
6
+ metadata.gz: 18323a22bcbd7acd242858d2791468bda38cf7f1ad90c5cb1383161795062b7317696607ecab37787cae76849cf20af70fb1c5b9500bea90ccf59791f4cd215d
7
+ data.tar.gz: 741f4e6cfc99e92130a66cea286e6186ba3090e601c8e1f5bcd5ba681e92abf4b3f4fda85a4574be3414fbb73ae96d45c99f4db814a011ebc407760f858987c0
@@ -1,2 +1 @@
1
- 0d%J0O����a���_E�0M���X�5I$�^s��da
2
- �V
1
+ Jna-9J��L�@[K�RR�جX�"$i3^~k�ޏ�]"#ߖ�;%&
data.tar.gz.sig CHANGED
@@ -1,3 +1,3 @@
1
- 4�eK�1R>�#7�������K7) ��֟��}�C"k;��~��%���r���g��(���"o��~6QWՆN�M�He��\ԉ�Rl������i�ma���\�݂c�5��a��Ա�6[���2�q�O���;5�^O;c�6��'�J�ް��1lv�3>W*�0��TMFX�?!��d~�w�gX(�^*L��(�p�D������~�W]�
2
-
3
- �� 0:�
1
+ !������lr]' ظ�a��yǯ\n��
2
+ 6������o������M޼f$���� _V��Z�4dB+Q��5LR-�f��HɄp��U `$O�&�afX�JPjE8
3
+ X\�ğ�63jh�}��7���zI���/�@�Hb���x]6)�� �&�}b�IP��Q���.]���i)�^A�7Μf�?�W�â���K̉+O|6q�?vy��]�7��~��di�T��ݮ�#r�
@@ -13,9 +13,9 @@ class ChronicCron
13
13
 
14
14
  attr_reader :to_expression
15
15
 
16
- def initialize(s, now=Time.now, log: nil)
16
+ def initialize(s, now=Time.now, log: nil, debug: false)
17
17
 
18
- @now, @log = now, log
18
+ @now, @log, @debug = now, log, debug
19
19
 
20
20
  super()
21
21
  @params = {input: s}
@@ -70,11 +70,17 @@ class ChronicCron
70
70
 
71
71
  # e.g. 00 5 15 * *
72
72
  get /(#{r}\s+#{r}\s+#{r}\s#{r}\s#{r})(\s#{r})?/ do
73
+
74
+ puts 'ChronicCron#expressions 10' if @debug
75
+
73
76
  "%s%s" % params[:captures]
74
77
  end
75
78
 
76
79
  # e.g. 9:00-18:00 every day
77
80
  get /(\d{1,2}):(\d{1,2})-(\d{1,2}):\d{1,2}\s+#{daily}/ do
81
+
82
+ puts 'ChronicCron#expressions 20' if @debug
83
+
78
84
  "%s %s-%s * * *" % params[:captures].values_at(1,0,2)
79
85
  end
80
86
 
@@ -84,6 +90,9 @@ class ChronicCron
84
90
 
85
91
  hrs1 = meridiem1 == 'pm' ? r_hrs1.to_i + 12 : r_hrs1
86
92
  hrs2 = meridiem2 == 'pm' ? r_hrs2.to_i + 12 : r_hrs2
93
+
94
+ puts 'ChronicCron#expressions 30' if @debug
95
+
87
96
  "%s/%s %s-%s * * %s" % [mins1.to_i, interval_mins, hrs1, hrs2, wdays]
88
97
  end
89
98
 
@@ -92,6 +101,9 @@ class ChronicCron
92
101
  |interval_mins, r_hrs1, mins1, meridiem1, r_hrs2, meridiem2|
93
102
  hrs1 = meridiem1 == 'pm' ? r_hrs1.to_i + 12 : r_hrs1
94
103
  hrs2 = meridiem2 == 'pm' ? r_hrs2.to_i + 12 : r_hrs2
104
+
105
+ puts 'ChronicCron#expressions 40' if @debug
106
+
95
107
  "%s/%s %s-%s * * *" % [mins1.to_i, interval_mins, hrs1, hrs2]
96
108
  end
97
109
 
@@ -100,12 +112,18 @@ class ChronicCron
100
112
  |r_hrs1, mins1, meridiem1, r_hrs2, meridiem2|
101
113
  hrs1 = meridiem1 == 'pm' ? r_hrs1.to_i + 12 : r_hrs1
102
114
  hrs2 = meridiem2 == 'pm' ? r_hrs2.to_i + 12 : r_hrs2
115
+
116
+ puts 'ChronicCron#expressions 50' if @debug
117
+
103
118
  "%s %s-%s * * *" % [mins1.to_i, hrs1, hrs2]
104
119
  end
105
120
 
106
121
  # e.g. 10:15am every day
107
122
  get /(\d{1,2}):?(\d{1,2})([ap]m)?\s+#{daily}/ do |raw_hrs, mins, meridiem|
108
123
  hrs = in24hrs(raw_hrs, meridiem)
124
+
125
+ puts 'ChronicCron#expressions 60' if @debug
126
+
109
127
  "%s %s * * *" % [mins.to_i, hrs]
110
128
  end
111
129
 
@@ -113,11 +131,17 @@ class ChronicCron
113
131
  get /(\d{1,2}):?(\d{1,2})([ap]m)?\s+(\w+) to (\w+)/ do
114
132
  |raw_hrs, mins, meridiem, wday1, wday2|
115
133
  hrs = in24hrs(raw_hrs, meridiem)
134
+
135
+ puts 'ChronicCron#expressions 70' if @debug
136
+
116
137
  "%s %s * * %s-%s" % [mins.to_i, hrs , wday1, wday2]
117
138
  end
118
139
 
119
140
  # e.g. at 11:00 and 16:00 on every day
120
141
  get /(\d{1,2}):?(\d{1,2}) and (\d{1,2}):?\d{1,2} (?:on )?#{daily}/ do
142
+
143
+ puts 'ChronicCron#expressions 80' if @debug
144
+
121
145
  "%s %s,%s * * *" % params[:captures].values_at(1,0,2)
122
146
  end
123
147
 
@@ -136,6 +160,9 @@ class ChronicCron
136
160
  get /(\d{1,2}):?(\d{1,2})([ap]m)?\s+(?:on )?every #{weekday}/i do
137
161
  |raw_hrs, mins, meridiem, wday|
138
162
  hrs = in24hrs(raw_hrs, meridiem)
163
+
164
+ puts 'ChronicCron#expressions 90' if @debug
165
+
139
166
  "%s %s * * %s" % [mins, hrs , wday]
140
167
  end
141
168
 
@@ -143,6 +170,9 @@ class ChronicCron
143
170
  get /(\d{1,2})([ap]m)?\s+(?:on )?every #{weekday}/i do
144
171
  |raw_hrs, meridiem, wday|
145
172
  hrs = in24hrs(raw_hrs, meridiem)
173
+
174
+ puts 'ChronicCron#expressions 100' if @debug
175
+
146
176
  "0 %s * * %s" % [hrs , wday]
147
177
  end
148
178
 
@@ -158,6 +188,8 @@ class ChronicCron
158
188
  get(/every (\d{1,2}) days?/) do |days|
159
189
 
160
190
  log.info 'ChronicCron/expressions/get: r130' if log
191
+ puts 'ChronicCron#expressions 150' if @debug
192
+
161
193
  "* * */%s * *" % [days]
162
194
  end
163
195
 
@@ -171,6 +203,9 @@ class ChronicCron
171
203
  t
172
204
  end
173
205
  )
206
+
207
+ puts 'ChronicCron#expressions 170' if @debug
208
+
174
209
  "%s %s %s %s *" % TimeToday.between(s1,s2).to_a[1..4]
175
210
  end
176
211
 
@@ -182,6 +217,8 @@ class ChronicCron
182
217
  t
183
218
  end
184
219
  )
220
+ puts 'ChronicCron#expressions 180' if @debug
221
+
185
222
  "%s %s %s %s *" % TimeToday.future.to_a[1..4]
186
223
  end
187
224
 
@@ -206,6 +243,9 @@ class ChronicCron
206
243
  raw_time ||= '6:00am'
207
244
 
208
245
  minute, hour = Chronic.parse(raw_time).to_a[1,2]
246
+
247
+ puts 'ChronicCron#expressions 190' if @debug
248
+
209
249
  "%s %s %s * %s" % [minute, hour, day_range, wday]
210
250
 
211
251
  end
@@ -216,6 +256,8 @@ class ChronicCron
216
256
 
217
257
  hrs = in24hrs(raw_hrs, meridiem)
218
258
 
259
+ puts 'ChronicCron#expressions 200' if @debug
260
+
219
261
  "0 %s * * %s" % [hrs , Date::DAYNAMES.index(wday.capitalize)]
220
262
  end
221
263
 
@@ -227,21 +269,39 @@ class ChronicCron
227
269
  ([ap]m)/i do |day, month, raw_hrs, mins, meridiem|
228
270
 
229
271
  now = Chronic.parse(month, now: @now)
272
+
273
+ d = last_wdayofmonth(day, now)
230
274
 
231
- t = Chronic.parse(month, now:
232
- Time.local(now > @now ? now.year : now.year.next))
233
- t2 = Chronic.parse('last ' + day, now:
234
- Time.local(t.year, t.month.next)).to_date
235
275
  hrs = in24hrs(raw_hrs, meridiem)
236
276
 
237
- "%s %s %s %s *" % [mins.to_i, hrs, t2.day, t.month]
277
+ puts 'ChronicCron#expressions 210' if @debug
278
+
279
+ "%s %s %s %s *" % [mins.to_i, hrs, d.day, d.month]
238
280
  end
281
+
282
+ # e.g. last sunday of October
283
+
284
+ get /last (#{Date::DAYNAMES.join('|')}) (?:of|in) \
285
+ (#{Date::MONTHNAMES[1..-1].join('|')})/i do |day, month|
286
+
287
+ now = Chronic.parse(month, now: @now)
288
+
289
+ d = last_wdayofmonth(day, now)
290
+
291
+ puts 'ChronicCron#expressions 220' if @debug
292
+
293
+ "* * %s %s *" % [d.day, d.month]
294
+ end
295
+
239
296
 
240
297
  # e.g. every 2nd tuesday at 4:40pm
241
298
  get /every\s+2nd\s+#{weekday}\s+at\s+(\d{1,2})(?::(\d{1,2}))?([ap]m)/i do
242
299
  |wday, raw_hrs, mins, meridiem, |
243
300
  hrs = in24hrs(raw_hrs, meridiem)
244
301
  log.info 'ChronicCron/expressions/get: r230' if log
302
+
303
+ puts 'ChronicCron#expressions 220' if @debug
304
+
245
305
  "%s %s * * %s/2" % [mins.to_i, hrs , wday]
246
306
  end
247
307
 
@@ -249,6 +309,9 @@ class ChronicCron
249
309
  get /every\s+#{weekday}\s+at\s+(\d{1,2}):(\d{1,2})([ap]m)/i do
250
310
  |wday, raw_hrs, mins, meridiem, |
251
311
  hrs = in24hrs(raw_hrs, meridiem)
312
+
313
+ puts 'ChronicCron#expressions 230' if @debug
314
+
252
315
  "%s %s * * %s" % [mins, hrs , wday]
253
316
  end
254
317
 
@@ -258,6 +321,7 @@ class ChronicCron
258
321
 
259
322
  t = Chronic.parse(raw_time, :now => @now)
260
323
  log.info 'ChronicCron/expressions/get: r250' if log
324
+ puts 'ChronicCron#expressions 240' if @debug
261
325
 
262
326
  "%s %s * * %s/2" % [t.min,t.hour,t.wday]
263
327
 
@@ -267,6 +331,7 @@ class ChronicCron
267
331
  # e.g. every 2nd monday
268
332
  get /every 2nd #{weekday}/ do |wday|
269
333
 
334
+ puts 'ChronicCron#expressions 250' if @debug
270
335
  "* * * * %s/2" % [wday]
271
336
 
272
337
  end
@@ -279,6 +344,7 @@ class ChronicCron
279
344
  mins, hrs = t.to_a.values_at(1,2)
280
345
 
281
346
  log.info 'ChronicCron/expressions/get: r270' if log
347
+ puts 'ChronicCron#expressions 270' if @debug
282
348
 
283
349
  "%s %s * * %s/%s" % [mins, hrs, t.wday, interval]
284
350
  end
@@ -289,6 +355,8 @@ class ChronicCron
289
355
 
290
356
  t = Chronic.parse(raw_date, :now => @now)
291
357
  mins, hrs = t.to_a.values_at(1,2)
358
+ puts 'ChronicCron#expressions 280' if @debug
359
+
292
360
  "%s %s * * %s/%s" % [mins, hrs, t.wday, interval]
293
361
  end
294
362
 
@@ -297,6 +365,8 @@ class ChronicCron
297
365
 
298
366
  t = Chronic.parse(raw_date, :now => @now)
299
367
  mins, hrs, day, month, year = t.to_a.values_at(1,2,3,4,5)
368
+ puts 'ChronicCron#expressions 290' if @debug
369
+
300
370
  "%s %s %s %s %s/2 %s" % [mins, hrs, day, month, t.wday, year]
301
371
  end
302
372
 
@@ -305,11 +375,16 @@ class ChronicCron
305
375
 
306
376
  t = Chronic.parse(raw_date, :now => @now)
307
377
  mins, hrs, day, month, year = t.to_a.values_at(1,2,3,4,5)
378
+ puts 'ChronicCron#expressions 300' if @debug
379
+
308
380
  "%s %s %s %s %s %s" % [mins, hrs, day, month, t.wday, year]
309
381
  end
310
382
 
311
383
  # e.g. every sunday
312
384
  get /every\s+#{weekday}/ do |wday|
385
+
386
+ puts 'ChronicCron#expressions 310' if @debug
387
+
313
388
  "0 12 * * %s" % wday
314
389
  end
315
390
 
@@ -317,6 +392,8 @@ class ChronicCron
317
392
  get '*' do
318
393
 
319
394
  t = Chronic.parse(params[:input], :now => @now)
395
+ puts 'ChronicCron#expressions 330' if @debug
396
+
320
397
  "%s %s %s %s * %s" % t.to_a.values_at(1,2,3,4,5)
321
398
  end
322
399
 
@@ -330,6 +407,21 @@ class ChronicCron
330
407
  end
331
408
  end
332
409
 
410
+
333
411
  alias find_expression run_route
334
412
 
413
+ private
414
+
415
+ def last_wdayofmonth(day, now)
416
+
417
+ wday = Date::DAYNAMES.map(&:downcase).index(day)
418
+
419
+ d2 = Date.today
420
+ date = Date.civil(now.year, now.month, -1)
421
+ date -= 1 until date.wday == wday
422
+
423
+ return date
424
+
425
+ end
426
+
335
427
  end
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.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -31,7 +31,7 @@ cert_chain:
31
31
  q95F5t9M4vy0Q8baeY7AJ7+f6Z5LLLCK4MyPO2y4aYy209dwdEY2zHZOA+CLkPEU
32
32
  p0BvK7yY4ZqPZw==
33
33
  -----END CERTIFICATE-----
34
- date: 2018-03-13 00:00:00.000000000 Z
34
+ date: 2018-10-27 00:00:00.000000000 Z
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: app-routes
@@ -59,20 +59,20 @@ dependencies:
59
59
  requirements:
60
60
  - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: '0.3'
62
+ version: '0.4'
63
63
  - - ">="
64
64
  - !ruby/object:Gem::Version
65
- version: 0.3.5
65
+ version: 0.4.0
66
66
  type: :runtime
67
67
  prerelease: false
68
68
  version_requirements: !ruby/object:Gem::Requirement
69
69
  requirements:
70
70
  - - "~>"
71
71
  - !ruby/object:Gem::Version
72
- version: '0.3'
72
+ version: '0.4'
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: 0.3.5
75
+ version: 0.4.0
76
76
  - !ruby/object:Gem::Dependency
77
77
  name: chronic
78
78
  requirement: !ruby/object:Gem::Requirement
@@ -140,9 +140,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
140
  version: '0'
141
141
  requirements: []
142
142
  rubyforge_project:
143
- rubygems_version: 2.6.13
143
+ rubygems_version: 2.7.6
144
144
  signing_key:
145
145
  specification_version: 4
146
- summary: Converts a human-readable time (e.g. 10:15 daily) into a cron format (e,g,
146
+ summary: Converts a human-readable time (e.g. 10:15 daily) into a cron format (e,g,
147
147
  15 10 * * *)
148
148
  test_files: []
metadata.gz.sig CHANGED
Binary file