chronic_cron 0.6.2 → 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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/chronic_cron.rb +146 -144
- data.tar.gz.sig +0 -0
- metadata +3 -3
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 71cb9fbaff016e7cf04a40aa56dedba54844753254825889c6e1525aa680be7b
|
4
|
+
data.tar.gz: e5b614c4fdd6c3935eb7276387206c6b1e5ed90cf84c18c1a16ef8819fd6c318
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ca9ba056ab67289a9a63bfc865ab45f3d7cdf70caeb28db11c912f80e0161f6cf9aa7cf74a812c7cd5ee0372c14ca9b875c50d9321880bf29909fc1079fad5a
|
7
|
+
data.tar.gz: 067d8f29da520258af4fa0054e446084bb49cedb04260821a94f5ce0800b82ed4f9f7772f392d7d46ef7c87708dc2d3d4b1a891fe5ee9d5dbf8230351d2c34e5
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/lib/chronic_cron.rb
CHANGED
@@ -11,77 +11,77 @@ require 'timetoday'
|
|
11
11
|
class ChronicCron
|
12
12
|
include AppRoutes
|
13
13
|
using ColouredText
|
14
|
-
|
15
|
-
attr_reader :to_expression
|
16
|
-
|
14
|
+
|
15
|
+
attr_reader :to_expression
|
16
|
+
|
17
17
|
def self.parse(s)
|
18
18
|
r = new(s)
|
19
19
|
r.valid? ? r : nil
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
def initialize(s, now=Time.now, log: nil, debug: false)
|
23
|
-
|
23
|
+
|
24
24
|
@now, @log, @debug = now, log, debug
|
25
|
-
|
26
|
-
puts ('@now: ' + @now.inspect).debug if @debug
|
27
|
-
|
25
|
+
|
26
|
+
puts ('@now: ' + @now.inspect).debug if @debug
|
27
|
+
|
28
28
|
super()
|
29
29
|
@params = {input: s}
|
30
30
|
expressions(@params)
|
31
31
|
|
32
32
|
if s =~ /^tomorrow/i then
|
33
|
-
|
33
|
+
|
34
34
|
s.sub!(/^tomorrow /i,'')
|
35
35
|
expression = find_expression(s.downcase\
|
36
36
|
.sub(/^(?:is|on|at|from|starting)\s+/,''))
|
37
|
-
@cf = CronFormat.new(expression, now)
|
37
|
+
@cf = CronFormat.new(expression, now)
|
38
38
|
@cf.adjust_date @cf.to_time - (24 * 60 * 60)
|
39
|
-
|
39
|
+
|
40
40
|
else
|
41
|
-
|
41
|
+
|
42
42
|
expression = find_expression(s.downcase\
|
43
43
|
.sub(/^(?:on|at|from|starting)\s+/,''))
|
44
44
|
puts 'expression: ' + expression.inspect if @debug
|
45
45
|
return unless expression
|
46
|
-
|
47
|
-
@cf = CronFormat.new(expression, now)
|
48
|
-
|
46
|
+
|
47
|
+
@cf = CronFormat.new(expression, now)
|
48
|
+
|
49
49
|
end
|
50
|
-
|
50
|
+
|
51
51
|
|
52
52
|
@to_expression = @cf.to_expression
|
53
53
|
|
54
54
|
end
|
55
|
-
|
55
|
+
|
56
56
|
def inspect()
|
57
57
|
if @cf then
|
58
|
-
"#<ChronicCron:%s @to_expression=\"%s\", @to_time=\"%s\">" %
|
58
|
+
"#<ChronicCron:%s @to_expression=\"%s\", @to_time=\"%s\">" %
|
59
59
|
[self.object_id, @to_expression, @cf.to_time]
|
60
60
|
else
|
61
61
|
"#<ChronicCron:%s >" % [self.object_id]
|
62
62
|
end
|
63
63
|
end
|
64
|
-
|
64
|
+
|
65
65
|
def next()
|
66
66
|
@cf.next
|
67
67
|
end
|
68
|
-
|
69
|
-
def to_date()
|
68
|
+
|
69
|
+
def to_date()
|
70
70
|
@cf.to_time.to_date
|
71
71
|
end
|
72
|
-
|
72
|
+
|
73
73
|
def to_time()
|
74
74
|
@cf.to_time
|
75
75
|
end
|
76
|
-
|
76
|
+
|
77
77
|
def valid?
|
78
78
|
@cf.respond_to? :to_time
|
79
79
|
end
|
80
|
-
|
80
|
+
|
81
81
|
protected
|
82
82
|
|
83
|
-
def expressions(params)
|
84
|
-
|
83
|
+
def expressions(params)
|
84
|
+
|
85
85
|
log = @log
|
86
86
|
|
87
87
|
r = '[0-9\*,\?\/\-]+'
|
@@ -89,83 +89,83 @@ class ChronicCron
|
|
89
89
|
|
90
90
|
# e.g. 00 5 15 * *
|
91
91
|
get /(#{r}\s+#{r}\s+#{r}\s#{r}\s#{r})(\s#{r})?/ do
|
92
|
-
|
92
|
+
|
93
93
|
puts 'ChronicCron#expressions 10' if @debug
|
94
|
-
|
94
|
+
|
95
95
|
"%s%s" % params[:captures]
|
96
96
|
end
|
97
97
|
|
98
98
|
# e.g. 9:00-18:00 every day
|
99
99
|
get /(\d{1,2}):(\d{1,2})-(\d{1,2}):\d{1,2}\s+#{daily}/ do
|
100
|
-
|
100
|
+
|
101
101
|
puts 'ChronicCron#expressions 20' if @debug
|
102
|
-
|
102
|
+
|
103
103
|
"%s %s-%s * * *" % params[:captures].values_at(1,0,2)
|
104
|
-
end
|
104
|
+
end
|
105
105
|
|
106
106
|
# e.g. every 30mins from 8:00am until 8:00pm mon-fri
|
107
|
-
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
|
107
|
+
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
|
108
108
|
|interval_mins, r_hrs1, mins1, meridiem1, r_hrs2, meridiem2, wdays|
|
109
109
|
|
110
110
|
hrs1 = meridiem1 == 'pm' ? r_hrs1.to_i + 12 : r_hrs1
|
111
111
|
hrs2 = meridiem2 == 'pm' ? r_hrs2.to_i + 12 : r_hrs2
|
112
|
-
|
112
|
+
|
113
113
|
puts 'ChronicCron#expressions 30' if @debug
|
114
|
-
|
114
|
+
|
115
115
|
"%s/%s %s-%s * * %s" % [mins1.to_i, interval_mins, hrs1, hrs2, wdays]
|
116
|
-
end
|
117
|
-
|
116
|
+
end
|
117
|
+
|
118
118
|
# e.g. every 30mins from 8:00am until 8:00pm every day
|
119
|
-
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
|
119
|
+
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
|
120
120
|
|interval_mins, r_hrs1, mins1, meridiem1, r_hrs2, meridiem2|
|
121
121
|
hrs1 = meridiem1 == 'pm' ? r_hrs1.to_i + 12 : r_hrs1
|
122
122
|
hrs2 = meridiem2 == 'pm' ? r_hrs2.to_i + 12 : r_hrs2
|
123
|
-
|
123
|
+
|
124
124
|
puts 'ChronicCron#expressions 40' if @debug
|
125
|
-
|
125
|
+
|
126
126
|
"%s/%s %s-%s * * *" % [mins1.to_i, interval_mins, hrs1, hrs2]
|
127
|
-
end
|
128
|
-
|
127
|
+
end
|
128
|
+
|
129
129
|
# e.g. 8:00am until 8:00pm every day
|
130
|
-
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
|
130
|
+
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
|
131
131
|
|r_hrs1, mins1, meridiem1, r_hrs2, meridiem2|
|
132
132
|
hrs1 = meridiem1 == 'pm' ? r_hrs1.to_i + 12 : r_hrs1
|
133
133
|
hrs2 = meridiem2 == 'pm' ? r_hrs2.to_i + 12 : r_hrs2
|
134
|
-
|
134
|
+
|
135
135
|
puts 'ChronicCron#expressions 50' if @debug
|
136
|
-
|
136
|
+
|
137
137
|
"%s %s-%s * * *" % [mins1.to_i, hrs1, hrs2]
|
138
|
-
end
|
138
|
+
end
|
139
139
|
|
140
140
|
# e.g. 10:15am every day
|
141
141
|
get /(\d{1,2}):?(\d{1,2})([ap]m)?\s+#{daily}/ do |raw_hrs, mins, meridiem|
|
142
142
|
hrs = in24hrs(raw_hrs, meridiem)
|
143
|
-
|
143
|
+
|
144
144
|
puts 'ChronicCron#expressions 60' if @debug
|
145
|
-
|
145
|
+
|
146
146
|
"%s %s * * *" % [mins.to_i, hrs]
|
147
147
|
end
|
148
148
|
|
149
149
|
# e.g. at 7:30am Monday to Friday
|
150
|
-
get /(\d{1,2}):?(\d{1,2})([ap]m)?\s+(\w+) to (\w+)/ do
|
150
|
+
get /(\d{1,2}):?(\d{1,2})([ap]m)?\s+(\w+) to (\w+)/ do
|
151
151
|
|raw_hrs, mins, meridiem, wday1, wday2|
|
152
152
|
hrs = in24hrs(raw_hrs, meridiem)
|
153
|
-
|
153
|
+
|
154
154
|
puts 'ChronicCron#expressions 70' if @debug
|
155
|
-
|
155
|
+
|
156
156
|
"%s %s * * %s-%s" % [mins.to_i, hrs , wday1, wday2]
|
157
|
-
end
|
158
|
-
|
157
|
+
end
|
158
|
+
|
159
159
|
# e.g. at 11:00 and 16:00 on every day
|
160
160
|
get /(\d{1,2}):?(\d{1,2}) and (\d{1,2}):?\d{1,2} (?:on )?#{daily}/ do
|
161
|
-
|
161
|
+
|
162
162
|
puts 'ChronicCron#expressions 80' if @debug
|
163
|
-
|
163
|
+
|
164
164
|
"%s %s,%s * * *" % params[:captures].values_at(1,0,2)
|
165
165
|
end
|
166
166
|
|
167
|
-
|
168
|
-
get('hourly') {'0 * * * *'}
|
167
|
+
|
168
|
+
get('hourly') {'0 * * * *'}
|
169
169
|
get('daily') {'0 0 * * *'}
|
170
170
|
get('midnight') {'0 0 * * *'}
|
171
171
|
get('weekly') {'0 0 * * 0'}
|
@@ -174,44 +174,44 @@ class ChronicCron
|
|
174
174
|
get('annually') {'0 0 1 1 *'}
|
175
175
|
|
176
176
|
weekday = '((?:mon|tue|wed|thu|fri|sat|sun)\w*)'
|
177
|
-
|
177
|
+
|
178
178
|
# e.g. at 10:30pm on every Monday
|
179
|
-
get /(\d{1,2}):?(\d{1,2})([ap]m)?\s+(?:on )?every #{weekday}/i do
|
180
|
-
|raw_hrs, mins, meridiem, wday|
|
179
|
+
get /(\d{1,2}):?(\d{1,2})([ap]m)?\s+(?:on )?every #{weekday}/i do
|
180
|
+
|raw_hrs, mins, meridiem, wday|
|
181
181
|
hrs = in24hrs(raw_hrs, meridiem)
|
182
|
-
|
182
|
+
|
183
183
|
puts 'ChronicCron#expressions 90' if @debug
|
184
|
-
|
184
|
+
|
185
185
|
"%s %s * * %s" % [mins, hrs , wday]
|
186
186
|
end
|
187
|
-
|
187
|
+
|
188
188
|
# e.g. at 10pm on every Monday
|
189
|
-
get /(\d{1,2})([ap]m)?\s+(?:on )?every #{weekday}/i do
|
189
|
+
get /(\d{1,2})([ap]m)?\s+(?:on )?every #{weekday}/i do
|
190
190
|
|raw_hrs, meridiem, wday|
|
191
191
|
hrs = in24hrs(raw_hrs, meridiem)
|
192
|
-
|
192
|
+
|
193
193
|
puts 'ChronicCron#expressions 100' if @debug
|
194
|
-
|
194
|
+
|
195
195
|
"0 %s * * %s" % [hrs , wday]
|
196
|
-
end
|
197
|
-
|
196
|
+
end
|
197
|
+
|
198
198
|
# e.g. every 10 minutes
|
199
199
|
get(/every (\d{1,2}) min(?:ute)?s?/){|mins| "*/%s * * * *" % [mins]}
|
200
200
|
get(/every min(?:ute)?/){"* * * * *"}
|
201
|
-
|
201
|
+
|
202
202
|
# e.g. every 2 hours
|
203
203
|
get(/every (\d{1,2}) h(?:ou)?rs?/){|hrs| "* */%s * * *" % [hrs]}
|
204
204
|
get(/every hour/){ "0 * * * *"}
|
205
|
-
|
205
|
+
|
206
206
|
# e.g. every 2 days
|
207
207
|
get(/every (\d{1,2}) days?/) do |days|
|
208
|
-
|
208
|
+
|
209
209
|
log.info 'ChronicCron/expressions/get: r130' if log
|
210
210
|
puts 'ChronicCron#expressions 150' if @debug
|
211
|
-
|
211
|
+
|
212
212
|
"* * */%s * *" % [days]
|
213
213
|
end
|
214
|
-
|
214
|
+
|
215
215
|
get(/#{daily}/){ "0 0 * * *"}
|
216
216
|
|
217
217
|
get /(?:any\s?time)?(?: today)? between (\S+) and (\S+)/ do |s1, s2|
|
@@ -222,12 +222,12 @@ class ChronicCron
|
|
222
222
|
t
|
223
223
|
end
|
224
224
|
)
|
225
|
-
|
225
|
+
|
226
226
|
puts 'ChronicCron#expressions 170' if @debug
|
227
|
-
|
227
|
+
|
228
228
|
"%s %s %s %s *" % TimeToday.between(s1,s2).to_a[1..4]
|
229
229
|
end
|
230
|
-
|
230
|
+
|
231
231
|
get /any\s?time today/ do
|
232
232
|
self.instance_eval %q(
|
233
233
|
def next()
|
@@ -237,10 +237,10 @@ class ChronicCron
|
|
237
237
|
end
|
238
238
|
)
|
239
239
|
puts 'ChronicCron#expressions 180' if @debug
|
240
|
-
|
240
|
+
|
241
241
|
"%s %s %s %s *" % TimeToday.future.to_a[1..4]
|
242
242
|
end
|
243
|
-
|
243
|
+
|
244
244
|
# e.g. first thursday of each month at 7:30pm
|
245
245
|
nday = '(\w+(?:st|rd|nd))\s+' + weekday + '\s+'
|
246
246
|
get /#{nday}(?:of\s+)?(?:the|each|every)\s+month(?:\s+at\s+([^\s]+))?/i do
|
@@ -249,9 +249,9 @@ class ChronicCron
|
|
249
249
|
month = @now.month
|
250
250
|
|
251
251
|
h = {
|
252
|
-
/first|1st/i => '1-7',
|
253
|
-
/second|2nd/i => '8-14',
|
254
|
-
/third|3rd/i => '15-21',
|
252
|
+
/first|1st/i => '1-7',
|
253
|
+
/second|2nd/i => '8-14',
|
254
|
+
/third|3rd/i => '15-21',
|
255
255
|
/fourth|4th|last/i => '22-28'
|
256
256
|
}
|
257
257
|
|
@@ -262,80 +262,80 @@ class ChronicCron
|
|
262
262
|
raw_time ||= '6:00am'
|
263
263
|
|
264
264
|
minute, hour = Chronic.parse(raw_time).to_a[1,2]
|
265
|
-
|
265
|
+
|
266
266
|
puts 'ChronicCron#expressions 190' if @debug
|
267
|
-
|
267
|
+
|
268
268
|
"%s %s %s * %s" % [minute, hour, day_range, wday]
|
269
269
|
|
270
270
|
end
|
271
|
-
|
271
|
+
|
272
272
|
# e.g. every tuesday at 4pm
|
273
273
|
get /every\s+#{weekday}\s+(?:at\s+)?(\d{1,2})([ap]m)/i do
|
274
274
|
|wday, raw_hrs, meridiem, |
|
275
275
|
|
276
|
-
hrs = in24hrs(raw_hrs, meridiem)
|
277
|
-
|
276
|
+
hrs = in24hrs(raw_hrs, meridiem)
|
277
|
+
|
278
278
|
puts 'ChronicCron#expressions 200' if @debug
|
279
|
-
|
279
|
+
|
280
280
|
"0 %s * * %s" % [hrs , Date::DAYNAMES.index(wday.capitalize)]
|
281
281
|
end
|
282
|
-
|
283
|
-
|
282
|
+
|
283
|
+
|
284
284
|
# e.g. last sunday of March at 1am
|
285
|
-
|
285
|
+
|
286
286
|
get /last (#{Date::DAYNAMES.join('|')}) (?:of|in) \
|
287
287
|
(#{Date::MONTHNAMES[1..-1].join('|')})\s+at\s+(\d{1,2})(?::(\d{1,2}))?\
|
288
288
|
([ap]m)/i do |day, month, raw_hrs, mins, meridiem|
|
289
289
|
|
290
290
|
now = Chronic.parse(month, now: @now)
|
291
291
|
puts ('now: ' + now.inspect).debug if @debug
|
292
|
-
|
292
|
+
|
293
293
|
d = last_wdayofmonth(day, now)
|
294
294
|
puts ('d: ' + d.inspect).debug if @debug
|
295
295
|
|
296
296
|
hrs = in24hrs(raw_hrs, meridiem)
|
297
|
-
|
297
|
+
|
298
298
|
puts 'ChronicCron#expressions 210' if @debug
|
299
|
-
|
299
|
+
|
300
300
|
"%s %s %s %s *" % [mins.to_i, hrs, d.day, d.month]
|
301
301
|
end
|
302
|
-
|
302
|
+
|
303
303
|
# e.g. last sunday of October
|
304
|
-
|
304
|
+
|
305
305
|
get /last (#{Date::DAYNAMES.join('|')}) (?:of|in) \
|
306
306
|
(#{Date::MONTHNAMES[1..-1].join('|')})/i do |day, month|
|
307
307
|
|
308
308
|
now = Chronic.parse(month, now: @now)
|
309
309
|
|
310
310
|
d = last_wdayofmonth(day, now)
|
311
|
-
|
311
|
+
|
312
312
|
puts 'ChronicCron#expressions 220' if @debug
|
313
|
-
|
313
|
+
|
314
314
|
"* * %s %s *" % [d.day, d.month]
|
315
315
|
end
|
316
|
-
|
316
|
+
|
317
317
|
|
318
318
|
# e.g. every 2nd tuesday at 4:40pm
|
319
319
|
get /every\s+2nd\s+#{weekday}\s+at\s+(\d{1,2})(?::(\d{1,2}))?([ap]m)/i do
|
320
320
|
|wday, raw_hrs, mins, meridiem, |
|
321
321
|
hrs = in24hrs(raw_hrs, meridiem)
|
322
|
-
log.info 'ChronicCron/expressions/get:
|
323
|
-
|
324
|
-
puts 'ChronicCron#expressions
|
325
|
-
|
322
|
+
log.info 'ChronicCron/expressions/get: r225' if log
|
323
|
+
|
324
|
+
puts 'ChronicCron#expressions 225' if @debug
|
325
|
+
|
326
326
|
"%s %s * * %s/2" % [mins.to_i, hrs , wday]
|
327
|
-
end
|
328
|
-
|
327
|
+
end
|
328
|
+
|
329
329
|
# e.g. every tuesday at 4:40pm
|
330
330
|
get /every\s+#{weekday}\s+at\s+(\d{1,2}):(\d{1,2})([ap]m)/i do
|
331
331
|
|wday, raw_hrs, mins, meridiem, |
|
332
332
|
hrs = in24hrs(raw_hrs, meridiem)
|
333
|
-
|
333
|
+
|
334
334
|
puts 'ChronicCron#expressions 230' if @debug
|
335
|
-
|
335
|
+
|
336
336
|
"%s %s * * %s" % [mins, hrs , wday]
|
337
|
-
end
|
338
|
-
|
337
|
+
end
|
338
|
+
|
339
339
|
|
340
340
|
# e.g. every 2nd week at 6am starting from 7th Jan
|
341
341
|
get /every 2nd week\s+at\s+([^\s]+)/ do |raw_time|
|
@@ -343,20 +343,20 @@ class ChronicCron
|
|
343
343
|
t = Chronic.parse(raw_time, :now => @now)
|
344
344
|
log.info 'ChronicCron/expressions/get: r250' if log
|
345
345
|
puts 'ChronicCron#expressions 240' if @debug
|
346
|
-
|
346
|
+
|
347
347
|
"%s %s * * %s/2" % [t.min,t.hour,t.wday]
|
348
348
|
|
349
|
-
end
|
350
|
-
|
351
|
-
|
349
|
+
end
|
350
|
+
|
351
|
+
|
352
352
|
# e.g. every 2nd monday
|
353
353
|
get /every 2nd #{weekday}/ do |wday|
|
354
354
|
|
355
355
|
puts 'ChronicCron#expressions 250' if @debug
|
356
356
|
"* * * * %s/2" % [wday]
|
357
357
|
|
358
|
-
end
|
359
|
-
|
358
|
+
end
|
359
|
+
|
360
360
|
|
361
361
|
# e.g. every 2 weeks (starting 7th Jan 2020)
|
362
362
|
get /^every (\w+) weeks \(starting ([^\)]+)/ do |interval, raw_date|
|
@@ -365,19 +365,19 @@ class ChronicCron
|
|
365
365
|
puts ('raw_date: ' + raw_date.inspect).debug
|
366
366
|
puts ('now: ' + @now.inspect).debug
|
367
367
|
end
|
368
|
-
|
368
|
+
|
369
369
|
t = raw_date ? Chronic.parse(raw_date, :now => @now) : @now
|
370
370
|
t += WEEK * interval.to_i until t > @now
|
371
371
|
mins, hrs = t.to_a.values_at(1,2)
|
372
|
-
|
373
|
-
log.info 'ChronicCron/expressions/get: r260' if log
|
372
|
+
|
373
|
+
log.info 'ChronicCron/expressions/get: r260' if log
|
374
374
|
if @debug then
|
375
375
|
puts 'ChronicCron#expressions 260'
|
376
376
|
puts ('t: ' + t.inspect).debug
|
377
377
|
end
|
378
378
|
|
379
379
|
"%s %s * * %s/%s" % [mins, hrs, t.wday, interval]
|
380
|
-
end
|
380
|
+
end
|
381
381
|
|
382
382
|
# e.g. every 2 weeks at 6am starting from 7th Jan
|
383
383
|
get /^every (\w+) weeks(?:\s+at\s+([^\s]+))?/ do |interval, raw_time|
|
@@ -386,19 +386,19 @@ class ChronicCron
|
|
386
386
|
puts ('raw_time: ' + raw_time.inspect).debug
|
387
387
|
puts ('now: ' + @now.inspect).debug
|
388
388
|
end
|
389
|
-
|
389
|
+
|
390
390
|
t = raw_time ? Chronic.parse(raw_time, :now => @now) : @now
|
391
391
|
t += WEEK * interval.to_i until t > @now
|
392
392
|
mins, hrs = t.to_a.values_at(1,2)
|
393
|
-
|
394
|
-
log.info 'ChronicCron/expressions/get: r270' if log
|
393
|
+
|
394
|
+
log.info 'ChronicCron/expressions/get: r270' if log
|
395
395
|
if @debug then
|
396
396
|
puts 'ChronicCron#expressions 270'
|
397
397
|
puts ('t: ' + t.inspect).debug
|
398
398
|
end
|
399
399
|
|
400
400
|
"%s %s * * %s/%s" % [mins, hrs, t.wday, interval]
|
401
|
-
end
|
401
|
+
end
|
402
402
|
|
403
403
|
|
404
404
|
# e.g. starting 05-Aug@15:03 every 2 weeks
|
@@ -407,19 +407,19 @@ class ChronicCron
|
|
407
407
|
t = Chronic.parse(raw_date, :now => @now)
|
408
408
|
mins, hrs = t.to_a.values_at(1,2)
|
409
409
|
puts 'ChronicCron#expressions 280' if @debug
|
410
|
-
|
410
|
+
|
411
411
|
"%s %s * * %s/%s" % [mins, hrs, t.wday, interval]
|
412
|
-
end
|
413
|
-
|
412
|
+
end
|
413
|
+
|
414
414
|
# e.g. from 05-Aug@12:34 fortnightly
|
415
415
|
get /(.*)\s+(?:biweekly|fortnightly)/ do |raw_date|
|
416
416
|
|
417
417
|
t = Chronic.parse(raw_date, :now => @now)
|
418
418
|
mins, hrs, day, month, year = t.to_a.values_at(1,2,3,4,5)
|
419
419
|
puts 'ChronicCron#expressions 290' if @debug
|
420
|
-
|
420
|
+
|
421
421
|
"%s %s %s %s %s/2 %s" % [mins, hrs, day, month, t.wday, year]
|
422
|
-
end
|
422
|
+
end
|
423
423
|
|
424
424
|
# e.g. from 06-Aug@1pm every week
|
425
425
|
get /(.*)\s+(?:weekly|every week)/ do |raw_date|
|
@@ -427,18 +427,18 @@ class ChronicCron
|
|
427
427
|
t = Chronic.parse(raw_date, :now => @now)
|
428
428
|
mins, hrs, day, month, year = t.to_a.values_at(1,2,3,4,5)
|
429
429
|
puts 'ChronicCron#expressions 300' if @debug
|
430
|
-
|
430
|
+
|
431
431
|
"%s %s %s %s %s %s" % [mins, hrs, day, month, t.wday, year]
|
432
|
-
end
|
433
|
-
|
432
|
+
end
|
433
|
+
|
434
434
|
# e.g. every sunday
|
435
435
|
get /every\s+#{weekday}/ do |wday|
|
436
|
-
|
436
|
+
|
437
437
|
puts 'ChronicCron#expressions 310' if @debug
|
438
|
-
|
438
|
+
|
439
439
|
"0 12 * * %s" % wday
|
440
|
-
end
|
441
|
-
|
440
|
+
end
|
441
|
+
|
442
442
|
# e.g. 04-Aug@12:34
|
443
443
|
get '*' do
|
444
444
|
|
@@ -452,29 +452,31 @@ class ChronicCron
|
|
452
452
|
|
453
453
|
def in24hrs(raw_hrs, meridiem)
|
454
454
|
|
455
|
+
puts 'raw_hrs: ' + raw_hrs.inspect if @debug
|
456
|
+
|
455
457
|
hrs = if meridiem == 'pm' then
|
456
|
-
raw_hrs.to_i + 12
|
458
|
+
raw_hrs.to_i < 12 ? raw_hrs.to_i + 12 : raw_hrs.to_i
|
457
459
|
else
|
458
460
|
raw_hrs.to_i == 12 ? 0 : raw_hrs
|
459
461
|
end
|
460
|
-
end
|
462
|
+
end
|
461
463
|
end
|
462
|
-
|
463
|
-
|
464
|
+
|
465
|
+
|
464
466
|
alias find_expression run_route
|
465
|
-
|
467
|
+
|
466
468
|
private
|
467
|
-
|
469
|
+
|
468
470
|
def last_wdayofmonth(day, now)
|
469
|
-
|
471
|
+
|
470
472
|
wday = Date::DAYNAMES.map(&:downcase).index(day)
|
471
473
|
|
472
474
|
d2 = Date.today
|
473
475
|
date = Date.civil(now.year, now.month, -1)
|
474
|
-
date -= 1 until date.wday == wday
|
475
|
-
|
476
|
+
date -= 1 until date.wday == wday
|
477
|
+
|
476
478
|
return date
|
477
|
-
|
479
|
+
|
478
480
|
end
|
479
|
-
|
481
|
+
|
480
482
|
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.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
Yot8KuDDSCrW7txuQr8nBdP8TtGBceStvkqoqSGvzsppfoAzykAkc8zujoN1s8d2
|
36
36
|
ioSUG4tmSnO/l+mykryWcbFA
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date:
|
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:
|
121
|
+
email: digital.robertson@gmail.com
|
122
122
|
executables: []
|
123
123
|
extensions: []
|
124
124
|
extra_rdoc_files: []
|
metadata.gz.sig
CHANGED
Binary file
|