chronic_cron 0.3.7 → 0.6.2

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
- SHA1:
3
- metadata.gz: 87c9ca865ed518099e452b2bdb060caec364df00
4
- data.tar.gz: 4138b72f8a680693fbb989a0978bb940165a5f12
2
+ SHA256:
3
+ metadata.gz: e96a490a0772cc3fb664d21a43ff08e1c75c57313a22d5ae439e4f8a0d9afe66
4
+ data.tar.gz: 7408f6ee2a8cf3b96f49df24701f497b5d9b5bb4a38589e0c16f5c89ba9ebdf3
5
5
  SHA512:
6
- metadata.gz: 971534edf8e75f73379dfa927c936eca189f21aa9b43fcd928c3c5070532624abaa7318a8a7f5245d66f05ea0a2fd199419b1443a89b50aba8b77ad440eb85f0
7
- data.tar.gz: 2e56ad254692427c0856d7292314a253eda668a409f7e3c658b67c5349f4d7b38cd6776cee6b03944123f4637b23d61293aa31259293c8958cc134cdcbec7dbf
6
+ metadata.gz: f75d5c571167e0f57ad4af8dbd5f79597f2eed929f03d83050b9b6e8e24bd90d9aca7cad1e029c2bb768b1db7fa9e24b96f91d1a0ce866b9b25fdcc15511b460
7
+ data.tar.gz: 793fdf3d0f8ba26a03450d9a8ba939f6dd8d54e472eff0c872b3793942a494b5eac98306e04866d2ebad27ef5b29ad11e407eebffd3242dd62258aff72a1bd72
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
@@ -1,4 +1,2 @@
1
- �� *�Rb�@��i���"NY�@6�ڡƑ0Bu5n�F�խZf«�2߱��Kx2n2+�
2
- l�Cv�#UM�'ի��/�'3��؝�;��'���1 _
3
- �i@�y)�q6��AR9�ϵ�-�^��µ��ɾJd�
4
- ����F���&�J�+�hVC���gᾤ9r�*�
1
+ ��t^�lL�����]cW�h�tI�����O��U4��; ����� �l�� ��š�r�}����gs�� 0�s��<]��KL��¡�R��\Bz{ )cMPC8 �m`�F2��#��,���(?�9���Se�Y�=F.􍼌9��X$��3��ElbS�q!b����,/��}lܻ�{j��Y�xA(<��gg�쭡
2
+ ,03�\=n�AUa6��7/o#(���k'sX�.�*�u|�@\J��Ps�i�dU'?z��|r���5b2�.L%}��p_i�~_Ђu�`���&��V���Yv'?,/p+���R������j[)"u��#5`H~h�r����o`,�4D�$�T�W�s��;E��m�i�D+�V�[
data/lib/chronic_cron.rb CHANGED
@@ -10,28 +10,56 @@ require 'timetoday'
10
10
 
11
11
  class ChronicCron
12
12
  include AppRoutes
13
+ using ColouredText
13
14
 
14
15
  attr_reader :to_expression
15
16
 
16
- def initialize(s, now=Time.now, log: nil)
17
+ def self.parse(s)
18
+ r = new(s)
19
+ r.valid? ? r : nil
20
+ end
21
+
22
+ def initialize(s, now=Time.now, log: nil, debug: false)
23
+
24
+ @now, @log, @debug = now, log, debug
17
25
 
18
- @now, @log = now, log
26
+ puts ('@now: ' + @now.inspect).debug if @debug
19
27
 
20
28
  super()
21
29
  @params = {input: s}
22
30
  expressions(@params)
23
31
 
24
- expression = find_expression(s.downcase\
32
+ if s =~ /^tomorrow/i then
33
+
34
+ s.sub!(/^tomorrow /i,'')
35
+ expression = find_expression(s.downcase\
36
+ .sub(/^(?:is|on|at|from|starting)\s+/,''))
37
+ @cf = CronFormat.new(expression, now)
38
+ @cf.adjust_date @cf.to_time - (24 * 60 * 60)
39
+
40
+ else
41
+
42
+ expression = find_expression(s.downcase\
25
43
  .sub(/^(?:on|at|from|starting)\s+/,''))
26
- #puts 'expression : ' + expression.inspect
27
- @cf = CronFormat.new(expression, now)
44
+ puts 'expression: ' + expression.inspect if @debug
45
+ return unless expression
46
+
47
+ @cf = CronFormat.new(expression, now)
48
+
49
+ end
50
+
51
+
28
52
  @to_expression = @cf.to_expression
29
53
 
30
54
  end
31
55
 
32
- def inspect()
33
- "#<ChronicCron:%s @to_expression=\"%s\", @to_time=\"%s\">" %
56
+ def inspect()
57
+ if @cf then
58
+ "#<ChronicCron:%s @to_expression=\"%s\", @to_time=\"%s\">" %
34
59
  [self.object_id, @to_expression, @cf.to_time]
60
+ else
61
+ "#<ChronicCron:%s >" % [self.object_id]
62
+ end
35
63
  end
36
64
 
37
65
  def next()
@@ -45,6 +73,10 @@ class ChronicCron
45
73
  def to_time()
46
74
  @cf.to_time
47
75
  end
76
+
77
+ def valid?
78
+ @cf.respond_to? :to_time
79
+ end
48
80
 
49
81
  protected
50
82
 
@@ -57,11 +89,17 @@ class ChronicCron
57
89
 
58
90
  # e.g. 00 5 15 * *
59
91
  get /(#{r}\s+#{r}\s+#{r}\s#{r}\s#{r})(\s#{r})?/ do
92
+
93
+ puts 'ChronicCron#expressions 10' if @debug
94
+
60
95
  "%s%s" % params[:captures]
61
96
  end
62
97
 
63
98
  # e.g. 9:00-18:00 every day
64
99
  get /(\d{1,2}):(\d{1,2})-(\d{1,2}):\d{1,2}\s+#{daily}/ do
100
+
101
+ puts 'ChronicCron#expressions 20' if @debug
102
+
65
103
  "%s %s-%s * * *" % params[:captures].values_at(1,0,2)
66
104
  end
67
105
 
@@ -71,6 +109,9 @@ class ChronicCron
71
109
 
72
110
  hrs1 = meridiem1 == 'pm' ? r_hrs1.to_i + 12 : r_hrs1
73
111
  hrs2 = meridiem2 == 'pm' ? r_hrs2.to_i + 12 : r_hrs2
112
+
113
+ puts 'ChronicCron#expressions 30' if @debug
114
+
74
115
  "%s/%s %s-%s * * %s" % [mins1.to_i, interval_mins, hrs1, hrs2, wdays]
75
116
  end
76
117
 
@@ -79,6 +120,9 @@ class ChronicCron
79
120
  |interval_mins, r_hrs1, mins1, meridiem1, r_hrs2, meridiem2|
80
121
  hrs1 = meridiem1 == 'pm' ? r_hrs1.to_i + 12 : r_hrs1
81
122
  hrs2 = meridiem2 == 'pm' ? r_hrs2.to_i + 12 : r_hrs2
123
+
124
+ puts 'ChronicCron#expressions 40' if @debug
125
+
82
126
  "%s/%s %s-%s * * *" % [mins1.to_i, interval_mins, hrs1, hrs2]
83
127
  end
84
128
 
@@ -87,12 +131,18 @@ class ChronicCron
87
131
  |r_hrs1, mins1, meridiem1, r_hrs2, meridiem2|
88
132
  hrs1 = meridiem1 == 'pm' ? r_hrs1.to_i + 12 : r_hrs1
89
133
  hrs2 = meridiem2 == 'pm' ? r_hrs2.to_i + 12 : r_hrs2
134
+
135
+ puts 'ChronicCron#expressions 50' if @debug
136
+
90
137
  "%s %s-%s * * *" % [mins1.to_i, hrs1, hrs2]
91
138
  end
92
139
 
93
140
  # e.g. 10:15am every day
94
141
  get /(\d{1,2}):?(\d{1,2})([ap]m)?\s+#{daily}/ do |raw_hrs, mins, meridiem|
95
142
  hrs = in24hrs(raw_hrs, meridiem)
143
+
144
+ puts 'ChronicCron#expressions 60' if @debug
145
+
96
146
  "%s %s * * *" % [mins.to_i, hrs]
97
147
  end
98
148
 
@@ -100,11 +150,17 @@ class ChronicCron
100
150
  get /(\d{1,2}):?(\d{1,2})([ap]m)?\s+(\w+) to (\w+)/ do
101
151
  |raw_hrs, mins, meridiem, wday1, wday2|
102
152
  hrs = in24hrs(raw_hrs, meridiem)
153
+
154
+ puts 'ChronicCron#expressions 70' if @debug
155
+
103
156
  "%s %s * * %s-%s" % [mins.to_i, hrs , wday1, wday2]
104
157
  end
105
158
 
106
159
  # e.g. at 11:00 and 16:00 on every day
107
160
  get /(\d{1,2}):?(\d{1,2}) and (\d{1,2}):?\d{1,2} (?:on )?#{daily}/ do
161
+
162
+ puts 'ChronicCron#expressions 80' if @debug
163
+
108
164
  "%s %s,%s * * *" % params[:captures].values_at(1,0,2)
109
165
  end
110
166
 
@@ -123,6 +179,9 @@ class ChronicCron
123
179
  get /(\d{1,2}):?(\d{1,2})([ap]m)?\s+(?:on )?every #{weekday}/i do
124
180
  |raw_hrs, mins, meridiem, wday|
125
181
  hrs = in24hrs(raw_hrs, meridiem)
182
+
183
+ puts 'ChronicCron#expressions 90' if @debug
184
+
126
185
  "%s %s * * %s" % [mins, hrs , wday]
127
186
  end
128
187
 
@@ -130,6 +189,9 @@ class ChronicCron
130
189
  get /(\d{1,2})([ap]m)?\s+(?:on )?every #{weekday}/i do
131
190
  |raw_hrs, meridiem, wday|
132
191
  hrs = in24hrs(raw_hrs, meridiem)
192
+
193
+ puts 'ChronicCron#expressions 100' if @debug
194
+
133
195
  "0 %s * * %s" % [hrs , wday]
134
196
  end
135
197
 
@@ -145,6 +207,8 @@ class ChronicCron
145
207
  get(/every (\d{1,2}) days?/) do |days|
146
208
 
147
209
  log.info 'ChronicCron/expressions/get: r130' if log
210
+ puts 'ChronicCron#expressions 150' if @debug
211
+
148
212
  "* * */%s * *" % [days]
149
213
  end
150
214
 
@@ -158,6 +222,9 @@ class ChronicCron
158
222
  t
159
223
  end
160
224
  )
225
+
226
+ puts 'ChronicCron#expressions 170' if @debug
227
+
161
228
  "%s %s %s %s *" % TimeToday.between(s1,s2).to_a[1..4]
162
229
  end
163
230
 
@@ -169,6 +236,8 @@ class ChronicCron
169
236
  t
170
237
  end
171
238
  )
239
+ puts 'ChronicCron#expressions 180' if @debug
240
+
172
241
  "%s %s %s %s *" % TimeToday.future.to_a[1..4]
173
242
  end
174
243
 
@@ -193,6 +262,9 @@ class ChronicCron
193
262
  raw_time ||= '6:00am'
194
263
 
195
264
  minute, hour = Chronic.parse(raw_time).to_a[1,2]
265
+
266
+ puts 'ChronicCron#expressions 190' if @debug
267
+
196
268
  "%s %s %s * %s" % [minute, hour, day_range, wday]
197
269
 
198
270
  end
@@ -203,6 +275,8 @@ class ChronicCron
203
275
 
204
276
  hrs = in24hrs(raw_hrs, meridiem)
205
277
 
278
+ puts 'ChronicCron#expressions 200' if @debug
279
+
206
280
  "0 %s * * %s" % [hrs , Date::DAYNAMES.index(wday.capitalize)]
207
281
  end
208
282
 
@@ -214,21 +288,41 @@ class ChronicCron
214
288
  ([ap]m)/i do |day, month, raw_hrs, mins, meridiem|
215
289
 
216
290
  now = Chronic.parse(month, now: @now)
291
+ puts ('now: ' + now.inspect).debug if @debug
292
+
293
+ d = last_wdayofmonth(day, now)
294
+ puts ('d: ' + d.inspect).debug if @debug
217
295
 
218
- t = Chronic.parse(month, now:
219
- Time.local(now > @now ? now.year : now.year.next))
220
- t2 = Chronic.parse('last ' + day, now:
221
- Time.local(t.year, t.month.next)).to_date
222
296
  hrs = in24hrs(raw_hrs, meridiem)
223
297
 
224
- "%s %s %s %s *" % [mins.to_i, hrs, t2.day, t.month]
298
+ puts 'ChronicCron#expressions 210' if @debug
299
+
300
+ "%s %s %s %s *" % [mins.to_i, hrs, d.day, d.month]
225
301
  end
302
+
303
+ # e.g. last sunday of October
304
+
305
+ get /last (#{Date::DAYNAMES.join('|')}) (?:of|in) \
306
+ (#{Date::MONTHNAMES[1..-1].join('|')})/i do |day, month|
307
+
308
+ now = Chronic.parse(month, now: @now)
309
+
310
+ d = last_wdayofmonth(day, now)
311
+
312
+ puts 'ChronicCron#expressions 220' if @debug
313
+
314
+ "* * %s %s *" % [d.day, d.month]
315
+ end
316
+
226
317
 
227
318
  # e.g. every 2nd tuesday at 4:40pm
228
319
  get /every\s+2nd\s+#{weekday}\s+at\s+(\d{1,2})(?::(\d{1,2}))?([ap]m)/i do
229
320
  |wday, raw_hrs, mins, meridiem, |
230
321
  hrs = in24hrs(raw_hrs, meridiem)
231
322
  log.info 'ChronicCron/expressions/get: r230' if log
323
+
324
+ puts 'ChronicCron#expressions 220' if @debug
325
+
232
326
  "%s %s * * %s/2" % [mins.to_i, hrs , wday]
233
327
  end
234
328
 
@@ -236,6 +330,9 @@ class ChronicCron
236
330
  get /every\s+#{weekday}\s+at\s+(\d{1,2}):(\d{1,2})([ap]m)/i do
237
331
  |wday, raw_hrs, mins, meridiem, |
238
332
  hrs = in24hrs(raw_hrs, meridiem)
333
+
334
+ puts 'ChronicCron#expressions 230' if @debug
335
+
239
336
  "%s %s * * %s" % [mins, hrs , wday]
240
337
  end
241
338
 
@@ -245,6 +342,7 @@ class ChronicCron
245
342
 
246
343
  t = Chronic.parse(raw_time, :now => @now)
247
344
  log.info 'ChronicCron/expressions/get: r250' if log
345
+ puts 'ChronicCron#expressions 240' if @debug
248
346
 
249
347
  "%s %s * * %s/2" % [t.min,t.hour,t.wday]
250
348
 
@@ -254,18 +352,50 @@ class ChronicCron
254
352
  # e.g. every 2nd monday
255
353
  get /every 2nd #{weekday}/ do |wday|
256
354
 
355
+ puts 'ChronicCron#expressions 250' if @debug
257
356
  "* * * * %s/2" % [wday]
258
357
 
259
358
  end
359
+
360
+
361
+ # e.g. every 2 weeks (starting 7th Jan 2020)
362
+ get /^every (\w+) weeks \(starting ([^\)]+)/ do |interval, raw_date|
363
+
364
+ if @debug then
365
+ puts ('raw_date: ' + raw_date.inspect).debug
366
+ puts ('now: ' + @now.inspect).debug
367
+ end
368
+
369
+ t = raw_date ? Chronic.parse(raw_date, :now => @now) : @now
370
+ t += WEEK * interval.to_i until t > @now
371
+ mins, hrs = t.to_a.values_at(1,2)
372
+
373
+ log.info 'ChronicCron/expressions/get: r260' if log
374
+ if @debug then
375
+ puts 'ChronicCron#expressions 260'
376
+ puts ('t: ' + t.inspect).debug
377
+ end
378
+
379
+ "%s %s * * %s/%s" % [mins, hrs, t.wday, interval]
380
+ end
260
381
 
261
382
  # e.g. every 2 weeks at 6am starting from 7th Jan
262
383
  get /^every (\w+) weeks(?:\s+at\s+([^\s]+))?/ do |interval, raw_time|
263
384
 
385
+ if @debug then
386
+ puts ('raw_time: ' + raw_time.inspect).debug
387
+ puts ('now: ' + @now.inspect).debug
388
+ end
389
+
264
390
  t = raw_time ? Chronic.parse(raw_time, :now => @now) : @now
265
391
  t += WEEK * interval.to_i until t > @now
266
392
  mins, hrs = t.to_a.values_at(1,2)
267
393
 
268
394
  log.info 'ChronicCron/expressions/get: r270' if log
395
+ if @debug then
396
+ puts 'ChronicCron#expressions 270'
397
+ puts ('t: ' + t.inspect).debug
398
+ end
269
399
 
270
400
  "%s %s * * %s/%s" % [mins, hrs, t.wday, interval]
271
401
  end
@@ -276,6 +406,8 @@ class ChronicCron
276
406
 
277
407
  t = Chronic.parse(raw_date, :now => @now)
278
408
  mins, hrs = t.to_a.values_at(1,2)
409
+ puts 'ChronicCron#expressions 280' if @debug
410
+
279
411
  "%s %s * * %s/%s" % [mins, hrs, t.wday, interval]
280
412
  end
281
413
 
@@ -284,6 +416,8 @@ class ChronicCron
284
416
 
285
417
  t = Chronic.parse(raw_date, :now => @now)
286
418
  mins, hrs, day, month, year = t.to_a.values_at(1,2,3,4,5)
419
+ puts 'ChronicCron#expressions 290' if @debug
420
+
287
421
  "%s %s %s %s %s/2 %s" % [mins, hrs, day, month, t.wday, year]
288
422
  end
289
423
 
@@ -292,11 +426,16 @@ class ChronicCron
292
426
 
293
427
  t = Chronic.parse(raw_date, :now => @now)
294
428
  mins, hrs, day, month, year = t.to_a.values_at(1,2,3,4,5)
429
+ puts 'ChronicCron#expressions 300' if @debug
430
+
295
431
  "%s %s %s %s %s %s" % [mins, hrs, day, month, t.wday, year]
296
432
  end
297
433
 
298
434
  # e.g. every sunday
299
435
  get /every\s+#{weekday}/ do |wday|
436
+
437
+ puts 'ChronicCron#expressions 310' if @debug
438
+
300
439
  "0 12 * * %s" % wday
301
440
  end
302
441
 
@@ -304,7 +443,11 @@ class ChronicCron
304
443
  get '*' do
305
444
 
306
445
  t = Chronic.parse(params[:input], :now => @now)
307
- "%s %s %s %s * %s" % t.to_a.values_at(1,2,3,4,5)
446
+ puts 'ChronicCron#expressions 330' if @debug
447
+ puts 't: ' + t.inspect if @debug
448
+ if t then
449
+ "%s %s %s %s * %s" % t.to_a.values_at(1,2,3,4,5)
450
+ end
308
451
  end
309
452
 
310
453
  def in24hrs(raw_hrs, meridiem)
@@ -317,6 +460,21 @@ class ChronicCron
317
460
  end
318
461
  end
319
462
 
463
+
320
464
  alias find_expression run_route
321
465
 
466
+ private
467
+
468
+ def last_wdayofmonth(day, now)
469
+
470
+ wday = Date::DAYNAMES.map(&:downcase).index(day)
471
+
472
+ d2 = Date.today
473
+ date = Date.civil(now.year, now.month, -1)
474
+ date -= 1 until date.wday == wday
475
+
476
+ return date
477
+
478
+ end
479
+
322
480
  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.3.7
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -10,28 +10,32 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDljCCAn6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBIMRIwEAYDVQQDDAlnZW1t
14
- YXN0ZXIxHjAcBgoJkiaJk/IsZAEZFg5qYW1lc3JvYmVydHNvbjESMBAGCgmSJomT
15
- 8ixkARkWAmV1MB4XDTE3MTExNDIzMzEwNVoXDTE4MTExNDIzMzEwNVowSDESMBAG
16
- A1UEAwwJZ2VtbWFzdGVyMR4wHAYKCZImiZPyLGQBGRYOamFtZXNyb2JlcnRzb24x
17
- EjAQBgoJkiaJk/IsZAEZFgJldTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
18
- ggEBALoP6xDp6zr7JbSKtgrtFy1wXlw+gWUsUgo1HGm4JYsHi8EIiEqalydehRVy
19
- lND168CJmdruvmvO7bjfvNzGXrYO5mRAzL54PLr7lzEbHNS3Xpac6EBbz7vU4bqV
20
- Q1RGai6youjvBhH8AkUDKeVDu7oLYJhff7CIXH2QJH92XXVAO5RnY7u/K/lEjczZ
21
- 2bnw2R383aRi+6deHmzRtUK3nbQgxhZXcjm27Xb8aU+OPmmfvx/ZbdVxIb6SEVGO
22
- 964YEOiRX1KbbnifRtfKgLCySF59jZA7KIZNRGOkerfOCNrk/D8GVECWL5erLKbw
23
- FipxWxCgik/d53/Tj/rtVI9jfGsCAwEAAaOBijCBhzAJBgNVHRMEAjAAMAsGA1Ud
24
- DwQEAwIEsDAdBgNVHQ4EFgQU+n2rEOLx53rnpxbluXFisamq6cEwJgYDVR0RBB8w
25
- HYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1h
26
- c3RlckBqYW1lc3JvYmVydHNvbi5ldTANBgkqhkiG9w0BAQUFAAOCAQEAjcAZZRIC
27
- hlLlASQ8THr7VLOa09WmEhlQ8QPm8HwiKoN0dTrq7V+tXyVVagJeVK1Lz/bsE4D+
28
- qZdibGXJ6m4uF3V99qsu+3yQE6hJCT8WL1dc8V6Gv0SL/6aNU+0+wFxa2zPONhJ3
29
- kCK3BJoBrAF4DycYLZ7NNi9Gk2UjFery1+51XOozsnIjawiyS1x/vx6LgO+ZxDFy
30
- KLkHJMGcM015IMO7DrDYieCXK7FEJ1bF2OTF4nuOQo5TP7hFugK7sW7EC3kUVLly
31
- q95F5t9M4vy0Q8baeY7AJ7+f6Z5LLLCK4MyPO2y4aYy209dwdEY2zHZOA+CLkPEU
32
- p0BvK7yY4ZqPZw==
13
+ MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
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
+ c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
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
33
37
  -----END CERTIFICATE-----
34
- date: 2017-11-14 00:00:00.000000000 Z
38
+ date: 2021-02-23 00:00:00.000000000 Z
35
39
  dependencies:
36
40
  - !ruby/object:Gem::Dependency
37
41
  name: app-routes
@@ -57,22 +61,22 @@ dependencies:
57
61
  name: cron_format
58
62
  requirement: !ruby/object:Gem::Requirement
59
63
  requirements:
60
- - - "~>"
61
- - !ruby/object:Gem::Version
62
- version: '0.3'
63
64
  - - ">="
64
65
  - !ruby/object:Gem::Version
65
- version: 0.3.4
66
+ version: 0.6.0
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '0.6'
66
70
  type: :runtime
67
71
  prerelease: false
68
72
  version_requirements: !ruby/object:Gem::Requirement
69
73
  requirements:
70
- - - "~>"
71
- - !ruby/object:Gem::Version
72
- version: '0.3'
73
74
  - - ">="
74
75
  - !ruby/object:Gem::Version
75
- version: 0.3.4
76
+ version: 0.6.0
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '0.6'
76
80
  - !ruby/object:Gem::Dependency
77
81
  name: chronic
78
82
  requirement: !ruby/object:Gem::Requirement
@@ -97,22 +101,22 @@ dependencies:
97
101
  name: timetoday
98
102
  requirement: !ruby/object:Gem::Requirement
99
103
  requirements:
100
- - - "~>"
101
- - !ruby/object:Gem::Version
102
- version: '0.2'
103
104
  - - ">="
104
105
  - !ruby/object:Gem::Version
105
106
  version: 0.2.0
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '0.2'
106
110
  type: :runtime
107
111
  prerelease: false
108
112
  version_requirements: !ruby/object:Gem::Requirement
109
113
  requirements:
110
- - - "~>"
111
- - !ruby/object:Gem::Version
112
- version: '0.2'
113
114
  - - ">="
114
115
  - !ruby/object:Gem::Version
115
116
  version: 0.2.0
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: '0.2'
116
120
  description:
117
121
  email: james@jamesrobertson.eu
118
122
  executables: []
@@ -140,9 +144,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
144
  version: '0'
141
145
  requirements: []
142
146
  rubyforge_project:
143
- rubygems_version: 2.6.13
147
+ rubygems_version: 2.7.10
144
148
  signing_key:
145
149
  specification_version: 4
146
- summary: Converts a human-readable time (e.g. 10:15 daily) into a cron format (e,g,
150
+ summary: Converts a human-readable time (e.g. 10:15 daily) into a cron format (e,g,
147
151
  15 10 * * *)
148
152
  test_files: []
metadata.gz.sig CHANGED
Binary file