cron_format 0.6.0 → 0.7.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
2
  SHA256:
3
- metadata.gz: 892de132d0417d5060080143683755b47c1e89af1c814c0c2df5ad8fda54b27d
4
- data.tar.gz: cb300817a2585aad227d75e2718616991550c5f3367ee546b10ad173c06eabd8
3
+ metadata.gz: 176722aed0424cfe698ec0bb9bc159a962a747e665b25ab4754101e078295248
4
+ data.tar.gz: e298aa75482b25335176e367f61fe9578fcca8c1539de5b0c0c8fa39dc88f580
5
5
  SHA512:
6
- metadata.gz: 06614ad37ee7e682d2aa2c39fc8e33d0169f1a5a26cf7ba96fc52aaa9b904995b27126105db37a3aecb1f642d4c40961efa6b57c17f8223a994e06589f6b4dd7
7
- data.tar.gz: 79278c3a5ff3db3e04790c5bef10309cd5b7a189af3251f8a3adc66bab551ff4c06014afa301f2ca23ff061f2c634ac5fcb009b3eee526690778a600385576e8
6
+ metadata.gz: 9ced118aab5b8e497844b1fc6e3978203ad3dc9849d33e5974cca00a5e4abe5512dff9314b0dbced73cab7c74eb6b008a6733e2da784b1f7472140800308a578
7
+ data.tar.gz: 9143586bcba2e3ab259a169e583c1733a72c24dc388c784287b256458800b75a6fbe1a4432df43beb84cc13a36aa8688cbdfa60bd3b42fb63156116a0510a56e
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/cron_format.rb CHANGED
@@ -19,68 +19,68 @@ class CronFormat
19
19
 
20
20
  attr_reader :to_time, :to_expression
21
21
 
22
- def initialize(cron_string, now=Time.now, debug: false)
23
-
22
+ def initialize(cron_string, now=Time.now, debug: false)
23
+
24
24
  puts 'inside CronFormat'.info if debug
25
25
  @cron_string, @now, @debug = cron_string, now, debug
26
26
  @to_time = @now
27
27
  parse()
28
-
28
+
29
29
  end
30
-
31
- # supply a Time object. Modifying the date can be helpful when
32
- # triggering a day before an actual expression date e.g. the day
30
+
31
+ # supply a Time object. Modifying the date can be helpful when
32
+ # triggering a day before an actual expression date e.g. the day
33
33
  # before the last sunday in March (British summer time).
34
34
  #
35
35
  def adjust_date(d)
36
-
36
+
37
37
  @to_time = d
38
38
  m, h, dd, mm, yy = @to_expression.split
39
-
39
+
40
40
  day = dd =~ /^\d+$/ ? d.day : dd
41
41
  month = mm =~ /^\d+$/ ? d.month : mm
42
42
  year = yy =~ /^\d+$/ ? d.year : yy
43
-
43
+
44
44
  @to_expression = [m, h, day, month, year].join(' ')
45
-
45
+
46
46
  end
47
-
47
+
48
48
  def next()
49
-
49
+
50
50
  nudge() #unless @cron_string =~ %r{/}
51
51
  #puts ':to_time : ' + @to_time.inspect
52
52
  parse(nudged: true)
53
53
  end
54
-
55
- private
56
-
54
+
55
+ private
56
+
57
57
  def nudge()
58
58
 
59
59
  t1 = @to_time
60
60
  puts ('t1: ' + t1.inspect).debug if @debug
61
61
  a = @cron_string.split
62
-
62
+
63
63
  val = if @cron_string =~ %r{[/,-]} then
64
64
  a.reverse.detect{|x| x[/[\/,-]/]}
65
65
  else
66
66
  a[1..-1].detect{|x| x != '*'}
67
67
  end
68
-
68
+
69
69
  index, n = 0, 1
70
-
70
+
71
71
  puts ('val: ' + val.inspect).debug if @debug
72
72
 
73
73
  if val then
74
74
  index = a.index(val)
75
75
 
76
- r = val[/,|\/(\d+)$/,1]
76
+ r = val[/,|\/(\d+)$/,1]
77
77
 
78
78
  n = if r then
79
-
79
+
80
80
  index == 4 ? r.to_i * 7 : 0
81
-
81
+
82
82
  else
83
-
83
+
84
84
  if val =~ /[,-]/ then
85
85
  1
86
86
  else
@@ -90,7 +90,7 @@ class CronFormat
90
90
  end
91
91
 
92
92
  puts ('index: ' + index.inspect).debug if @debug
93
-
93
+
94
94
  month_proc = lambda {|t1,n|
95
95
  a = t1.to_a
96
96
  a[4] = a[4] + n <= 12 ? a[4] + n : a[4] + n - 12
@@ -102,97 +102,97 @@ class CronFormat
102
102
  day_proc = lambda {|x,n| x + n * DAY}
103
103
 
104
104
  units = [
105
- lambda {|x,n| x + n * MINUTE},
106
- lambda {|x,n| x + n * HOUR},
107
- day_proc,
105
+ lambda {|x,n| x + n * MINUTE},
106
+ lambda {|x,n| x + n * HOUR},
107
+ day_proc,
108
108
  month_proc,
109
109
  day_proc
110
110
  ]
111
-
111
+
112
112
  if @debug then
113
113
  puts ('@to_time: ' + @to_time.inspect).debug
114
114
  puts ('n: ' + n.inspect).debug
115
115
  end
116
-
116
+
117
117
  r = units[index].call @to_time, n
118
-
118
+
119
119
  puts ('r: ' + r.inspect).debug if @debug
120
-
120
+
121
121
  @to_time = if n > 1 then
122
-
123
- # given day light savings, ensure the time fragment is preserved
122
+
123
+ # given day light savings, ensure the time fragment is preserved
124
124
  Time.new(r.year, r.month, r.day, t1.hour, t1.min)
125
-
125
+
126
126
  else
127
127
  r
128
128
  end
129
129
  #r += MINUTE if r == t1
130
130
 
131
- end
132
-
131
+ end
132
+
133
133
  def parse(nudged: false)
134
-
134
+
135
135
  puts ('0. @to_time: ' + @to_time.inspect).debug if @debug
136
136
 
137
137
  raw_a = @cron_string.split
138
138
  raw_a << '*' if raw_a.length <= 5 # add the year?
139
139
  mins, hours, day, month, wday, year = raw_a[0..5]
140
-
140
+
141
141
  if day[/\d+/] and month[/\d+/] and year == '*' then
142
142
  @to_time += DAY until @to_time.day == day.to_i and \
143
143
  @to_time.month == month.to_i
144
144
  end
145
-
145
+
146
146
  puts ('1. @to_time: ' + @to_time.inspect).debug if @debug
147
-
147
+
148
148
  #
149
-
149
+
150
150
  if @debug then
151
- puts ('1.5 @to_time: ' + @to_time.inspect).debug
151
+ puts ('1.5 @to_time: ' + @to_time.inspect).debug
152
152
  puts ('hours: ' + hours.inspect).debug
153
153
  puts ('mins: ' + mins.inspect).debug
154
154
  end
155
-
155
+
156
156
  if mins[/^\d+$/] and hours[/^\d+$/] then
157
157
 
158
158
  if @to_time.to_date != @now.to_date then
159
159
  @to_time = Time.local(@to_time.year, @to_time.month, @to_time.day)
160
160
  end
161
-
161
+
162
162
  until (@to_time.min == mins.to_i and @to_time.hour == hours.to_i) \
163
163
  or (@to_time - 1).isdst != @to_time.isdst do
164
-
164
+
165
165
  puts ('1.7 @to_time: ' + @to_time.inspect).debug if @debug
166
166
  @to_time += MINUTE
167
167
  end
168
168
  @to_time -= MINUTE
169
169
  else
170
-
170
+
171
171
  if mins[/^\d+$/] then
172
- @to_time += MINUTE until @to_time.min == mins.to_i
172
+ @to_time += MINUTE until @to_time.min == mins.to_i
173
173
  @to_time -= MINUTE
174
174
  end
175
-
175
+
176
176
  @to_time += HOUR until @to_time.hour == hours.to_i if hours[/^\d+$/]
177
177
  end
178
178
 
179
- puts ('2. @to_time: ' + @to_time.inspect).debug if @debug
180
-
179
+ puts ('2. @to_time: ' + @to_time.inspect).debug if @debug
180
+
181
181
  if wday[/^[0-6]$/] and @to_time.wday != wday.to_i then
182
182
  @to_time += DAY until @to_time.wday == wday.to_i
183
183
  end
184
-
184
+
185
185
  dayceiling = raw_a[2][/-(\d+)$/,1]
186
-
186
+
187
187
  if dayceiling and dayceiling.to_i <= @to_time.day then
188
188
 
189
189
  dt2 = @to_time.to_datetime
190
190
  next_month = dt2.next_month.month
191
191
  dt2 += 1 until dt2.month == next_month
192
192
 
193
- @to_time = dt2.to_time
193
+ @to_time = dt2.to_time
194
194
  end
195
-
195
+
196
196
  puts ('3. @to_time: ' + @to_time.inspect).debug if @debug
197
197
 
198
198
  units = @to_time.to_a.values_at(1..4) + [nil, @to_time.year]
@@ -200,13 +200,13 @@ class CronFormat
200
200
  procs = {
201
201
  min: lambda {|x, interval| x += (interval * MINUTE).to_i},
202
202
  hour: lambda {|x, interval| x += (interval * HOUR).to_i},
203
- day: lambda {|x, interval| x += (interval * DAY).to_i},
204
- month: lambda {|x, interval|
203
+ day: lambda {|x, interval| x += (interval * DAY).to_i},
204
+ month: lambda {|x, interval|
205
205
  date = x.to_a.values_at(1..5)
206
206
  interval.times { date[3].succ! }
207
207
  Time.parse(TF % date.reverse)},
208
- week: lambda {|x, interval| x += (interval * WEEK).to_i},
209
- year: lambda {|x, interval|
208
+ week: lambda {|x, interval| x += (interval * WEEK).to_i},
209
+ year: lambda {|x, interval|
210
210
  date = x.to_a.values_at(1..5)
211
211
  interval.times { date[4].succ! }
212
212
  Time.parse(TF % date.reverse)}
@@ -225,35 +225,35 @@ class CronFormat
225
225
  end
226
226
 
227
227
  end
228
-
228
+
229
229
  # take any repeater out of the unit value
230
230
  raw_units, repeaters = [], []
231
-
232
- raw_a.each do |x|
231
+
232
+ raw_a.each do |x|
233
233
  v1, v2 = x.split('/')
234
234
  raw_units << v1
235
235
  repeaters << v2
236
236
  end
237
-
238
-
237
+
238
+
239
239
  if raw_a[4] != '*' then
240
- r = /(sun|mon|tues|wed|thurs|fri|satur|sun)(day)?|tue|thu|sat/i
240
+ r = /(sun|mon|tues|wed|thurs|fri|satur|sun)(day)?|tue|thu|sat/i
241
241
 
242
242
  to_i = lambda {|x|
243
243
  a = Date::DAYNAMES
244
244
  a.index a.grep(/#{x}/i).first
245
245
  }
246
246
  raw_a[4].gsub!(r,&to_i)
247
- raw_units[4].gsub!(r,&to_i)
247
+ raw_units[4].gsub!(r,&to_i)
248
248
  end
249
-
250
- @to_expression = raw_a[0..4].join ' '
249
+
250
+ @to_expression = raw_a[0..4].join ' '
251
251
 
252
252
  raw_date = raw_units.map.with_index {|x,i| dt[i].call(x) }
253
253
 
254
254
  # expand the repeater
255
255
 
256
- ceil = {min: MINUTE, hour: 23, day: 31, month: 12}.values
256
+ ceil = {min: MINUTE, hour: 23, day: 31, month: 12}.values
257
257
 
258
258
  if repeaters.any? then
259
259
  repeaters.each_with_index do |x,i|
@@ -261,14 +261,14 @@ class CronFormat
261
261
  next if i == 4
262
262
 
263
263
  if x and not raw_a[i][/^\*/] then
264
- raw_date[i] = raw_date[i].map {|y|
264
+ raw_date[i] = raw_date[i].map {|y|
265
265
  (y.to_i...ceil[i]).step(x.to_i).to_a.map(&:to_s)
266
266
  }.flatten
267
- else
267
+ else
268
268
  raw_date[i]
269
- end
269
+ end
270
270
  end
271
- end
271
+ end
272
272
 
273
273
  dates = inflate(raw_date)
274
274
 
@@ -281,23 +281,23 @@ class CronFormat
281
281
  d << year
282
282
 
283
283
  next unless day_valid? d.reverse.take 3
284
- t = Time.parse(TF % d.reverse)
285
- # if there is a defined weekday, increment a day at
284
+ t = Time.parse(TF % d.reverse)
285
+ # if there is a defined weekday, increment a day at
286
286
  # a time to match that weekday
287
287
  if wday and wday != t.wday then
288
-
289
- t = Time.parse(TF % d.reverse)
288
+
289
+ t = Time.parse(TF % d.reverse)
290
290
 
291
291
  if repeaters[4] then
292
292
  t += repeaters[4].to_i * WEEK while t < @to_time
293
293
  else
294
- d[2], d[3] = @to_time.to_a.values_at(3,4).map(&:to_s)
295
- t += DAY until t.wday == wday.to_i
294
+ d[2], d[3] = @to_time.to_a.values_at(3,4).map(&:to_s)
295
+ t += DAY until t.wday == wday.to_i
296
296
  end
297
-
297
+
298
298
  end
299
-
300
- # increment the month, day, hour, and minute for
299
+
300
+ # increment the month, day, hour, and minute for
301
301
  # expressions which match '* * * *' consecutively
302
302
  i = 3
303
303
 
@@ -308,14 +308,14 @@ class CronFormat
308
308
  i -= 1
309
309
  end
310
310
 
311
- # starting from the biggest unit, attempt to increment that
311
+ # starting from the biggest unit, attempt to increment that
312
312
  # unit where it is equal to '*'
313
313
 
314
314
  if @debug then
315
315
  puts ('t: ' + t.inspect).debug
316
316
  puts ('@to_time: ' + @to_time.inspect).debug
317
317
  end
318
-
318
+
319
319
  if t < @to_time then
320
320
 
321
321
  if t.month < @to_time.month and raw_a[4] == '*' then
@@ -353,12 +353,12 @@ class CronFormat
353
353
  t = procs.values[i].call(t, repeaters[i].to_i) if repeaters[i]
354
354
  elsif raw_a[3] == '*' then
355
355
 
356
- t = increment_month d
357
- end
356
+ t = increment_month d
357
+ end
358
358
 
359
359
  end
360
360
 
361
- # after the units have been incremented we need to
361
+ # after the units have been incremented we need to
362
362
  # increment the weekday again if need be
363
363
  if wday then
364
364
 
@@ -371,6 +371,11 @@ class CronFormat
371
371
 
372
372
  end
373
373
 
374
+ if @debug then
375
+ puts ('2. t: ' + t.inspect).debug
376
+ puts ('2. @to_time: ' + @to_time.inspect).debug
377
+ end
378
+
374
379
  # finally, if the date is still less than the current time we can
375
380
  # increment the date using any repeating intervals
376
381
  if (t < @to_time or (!nudged and t == @to_time)) and repeaters.any? then
@@ -383,35 +388,35 @@ class CronFormat
383
388
  end
384
389
  end
385
390
 
386
- t
391
+ t
387
392
  end
388
-
393
+
389
394
  puts ('a: ' + a.inspect).debug if @debug
390
395
 
391
396
  @to_time = a.compact.min
392
397
  end
393
-
398
+
394
399
  def day_valid?(date)
395
400
 
396
401
  year, month, day = date
397
- last_day = DateTime.parse("%s-%s-%s" % [year,
402
+ last_day = DateTime.parse("%s-%s-%s" % [year,
398
403
  (month.to_i < 12 ? month.succ : 1), 1]) - 1
399
404
  day.to_i <= last_day.day
400
- end
405
+ end
401
406
 
402
407
  def increment_month(d)
403
-
408
+
404
409
  puts 'inside increment_month' if @debug
405
410
 
406
411
  if d[3].to_i <= 11 then
407
412
  d[3].succ!
408
- else
413
+ else
409
414
  d[3] = '1'
410
415
  d[4].succ!
411
416
  end
412
417
 
413
418
  Time.parse(TF % d.reverse)
414
- end
419
+ end
415
420
 
416
421
  def inflate(raw_a)
417
422
 
@@ -421,5 +426,5 @@ class CronFormat
421
426
  a.map{|x| x.length <= 1 ? x.first : x.shift}
422
427
  end
423
428
  end
424
-
429
+
425
430
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cron_format
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -11,54 +11,54 @@ cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
13
  MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
- YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMTkwOTEwMTI1MDI0WhcN
15
- MjAwOTA5MTI1MDI0WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
- cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCtHiaY
17
- F6JNBkgrV3+F6hU+5sfBZmujn/m8WZpHzUVOvG8KnRBXBx4/1R5xbPkswo8Pmq/B
18
- gqxu8JNFHzaUKseneuxWdSXokegiyeh7wgE1Io6cHU8Nc3G9DbBXQS9CI5Xc4w9+
19
- OqVc/fY4yuHGrbW53lqc9mmq2+oxjPUmk2POAm5bbe9Q81YQsBhN2p+ni+nkTvI3
20
- ntFFeoRwvP21rFWgqjyzlRmHlmorz1xaTxmb4XjpnuOEQqtj1dhFm54MR/fSXEqS
21
- UTNcqFKuqpFfHjJb79VeoqkO2cjNyp1qJQvbP5H+0ebjgxeRZBh2L6Nxt4mUpRp/
22
- 3XeazK28JCGYiTJVHr/rTcxfNPCnOVxxgv3Yr7SwJSQT5AyYCwbhluZ2cFT34qRb
23
- 4ZCIEpbf+P2/htbDSPTpHkRIGYREhhdta/x6X7ayWeKRioL6YU1QZxTww9ElU9h+
24
- 90rGVXOTEhkQIkuhWJ4fcLvBfDz/zbFSc89lFOEw+vAQjKgpXWhB2f9L8yECAwEA
25
- AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU3H+pX6Dj
26
- a4+oc8w9M/LCPwy4kGswJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjIwMjAyMTM1NDI2WhcN
15
+ MjMwMjAyMTM1NDI2WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDaqxbw
17
+ i8z4aBfUw7+JhsnZcVYu1jFVmXO63cYZ1G7VZ1mvBcDKmvdV/C1KsmvJwd/OF6Hw
18
+ CSypZVJP0RA37xnaKYP18uwhJZv8lQfjasdDe/4C4ZddH7P1QP3VP4WnzOf3Ve5F
19
+ cmTShT54uQfizdwRv2mG842hdyoX1DdaLZSA8adeMod/BJtkfSMVJjl971zO6o48
20
+ d7iWIYmYuZ6cNTv9iP3LbNwgqC7+zn/THw957Yck5yzGWAZu/ShxmlXFYU04V789
21
+ ++poeo7tNfvXmUcFdgOIOpLdy33ledbtMBM7MCUvX8KGn+CePyUfljcY/9nyGk7l
22
+ YRJ3P4bizbp3x9TKDShGxkSvZn28eJEjhq1sMzlB4JrrFlFVq9hDuasE3dkHVE30
23
+ KcO/vPbSs2LC2DQsrGeTSIye1S84pClYQtSAtlGqWczTz/6MWENwHwWI2vdnUdug
24
+ wZXBZeSpej/Dife8z0lL+JY+KN93pBtI4jqlij1OwlvUzJzDkqQKRCKkIisCAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUsNZCEbjl
26
+ +Uq/N/Syy8npoZaD1+wwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
27
  c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
- BgkqhkiG9w0BAQsFAAOCAYEAUJUtxM5fSHhA0dHtX8i06LRuSkYXr+tkF6wEcgqc
29
- l83KNdi8SRT2mCiXTZSIVmN+nH8YkatpGyQVk+tpEONGLDyjp5uwMh5Xb7eobCmY
30
- +E4Nxz+eWlozyzIAB+RXNcc/S6ACa2M/Fsd3gbjVZ6rZmlrefm1OaBy3i49NAp+0
31
- uxM0sfh44SuH9nDixq5s7+yIVdaTT2495vJxeTBCMLxFvbdREy997Q33I6TqwIiQ
32
- 2B7mFz+NYWE9h76gknZRjabNqZkoIB0B/j5H98EDOyUTXYOG90NDMDdPaGpn7up9
33
- tTLM6QEYgLe1FaUx88+ZU2NU8LIdV2I82VB/qgnjc20VwwQKVKN1oOROVil1B7MK
34
- EOhYx2GL5jEPgQKXBS+ffeAN99v6T7SkHTEz7vFyucrEEMkngpp9oy+vlfZQWL7N
35
- p6Ef7ciqPYpk9dcgBiC5AsmWmtb+cnHRrFQbEyU43PJ3jI5bx7OlgZGEU0V8g7hB
36
- 7wJJUc154LVYK+xBm6tZ/98Y
28
+ BgkqhkiG9w0BAQsFAAOCAYEAtBIY++5WxMTzCHiXGZK4dRJCNdRAkbmqm0fjJN1R
29
+ UYWdiFaxL7MHeAIfvHsak0h6LI3MPAQLaWkAyJ8L1ZLJIVRSvv0bx8fbLhBtN/FC
30
+ D0yfZMg72qhlRcsxzCVnG6wRQ5kluc4qhuNIKBYkOJ0WDPwzGDAZxyJ4yXHCLcRQ
31
+ OWJBYG8t1DmTKleEcp3CXAekJdO6l7Wi4cM7bYWQUCTxlOZa2D25YTvfqOpsk+EH
32
+ or4fMXtXEDQxaKx2wMkSBVy/rWBhyPg710+V/DEFeQ+hGhB9d99At57YF9D3y3+q
33
+ csZWukFdHN+hy4SdISkg8n8cWqcAwCwGqxF4xyxmVd0Ky7yO5qBmFAdNOkOfrB7+
34
+ ghwxte8R5fbBMm8cewDXZOQHxKxWGZRNdugo6RlR7qHdT4EB8/7quJkQtJq2wee7
35
+ IOc1Uet1LzHGtt67bFCbybnKiPeMGwdnC9KZwboHDQvntyk7WUSQuufvMrxo8AYF
36
+ I/8uxBZWY2iH3RgPYs9wlzDv
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: c32
42
42
  requirement: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - "~>"
45
- - !ruby/object:Gem::Version
46
- version: '0.1'
47
44
  - - ">="
48
45
  - !ruby/object:Gem::Version
49
- version: 0.1.2
46
+ version: 0.3.0
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '0.3'
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
- - - "~>"
55
- - !ruby/object:Gem::Version
56
- version: '0.1'
57
54
  - - ">="
58
55
  - !ruby/object:Gem::Version
59
- version: 0.1.2
56
+ version: 0.3.0
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '0.3'
60
60
  description:
61
- email: james@jamesrobertson.eu
61
+ email: digital.robertson@gmail.com
62
62
  executables: []
63
63
  extensions: []
64
64
  extra_rdoc_files: []
@@ -83,7 +83,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
83
83
  - !ruby/object:Gem::Version
84
84
  version: '0'
85
85
  requirements: []
86
- rubygems_version: 3.0.1
86
+ rubyforge_project:
87
+ rubygems_version: 2.7.10
87
88
  signing_key:
88
89
  specification_version: 4
89
90
  summary: Accepts a cron expression and outputs the relative time (e.g. 0 7 1 1 * *
metadata.gz.sig CHANGED
@@ -1 +1,2 @@
1
- m��m��%W<��p�N�%�ԡԎ�e�},���R�$�dn51��M�Ḱ[K%ryЧ��}3t"���� ��Bv��y:��-$> ���FZ�n���f��m ~��_>\g�����Ӫ���^RX�� "m.��Ȣ3�"���)�-l>?7�6[3���q���{B���f|��]���+T]��!|��j �Sla4>kgg�'[��8��W���o��/��~�jJo�U��,`��1k�uZ� Wx�Q�����0<"9�V����b�I ެSQ)��\Ɖ�@5���M��> �E}�W(l�+�`���j�!�)$���INŨ�Z/�܍Fˑ���0j��n�� �����Ϙߧ�e��4����G��
1
+ �*�ԜХ9��p���#����G��4WOU��X��\!w:�O������QuZ3"�U ��ё���\)��� ��M[�١�'՟φjK��eN���Ț�rqW�nޚ��֠��Lu_�-b,�R(����^uw1i��n(�FQ� ��kXVep̫��B���GTc&c��Xd'���gX��U)��s(9�/���L���
2
+ 6�l�s1ْ��̹&w�!G��͕����tqR�V3.]�Zqzуx���l?c� (��l&��'ԙ�e�*$�� ��5p�tƯp��ClN��(Cg��8�&�F�'