cron_format 0.6.0 → 0.7.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.
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�'