fugit 1.4.1 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of fugit might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +28 -0
- data/CREDITS.md +8 -1
- data/LICENSE.txt +1 -1
- data/README.md +21 -1
- data/lib/fugit.rb +1 -1
- data/lib/fugit/cron.rb +14 -14
- data/lib/fugit/duration.rb +4 -4
- data/lib/fugit/misc.rb +3 -0
- data/lib/fugit/nat.rb +11 -7
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae056967c15463b2aed7a2839f383b9965968ae19414d214f37841ccabdeb7e5
|
4
|
+
data.tar.gz: 33ddf5842af78f3bba3a477800dfde053bee82cde318575f7c78d3e25df8e910
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13c7b00c76df998cac5c3ab8e754e7519b34c91c4653afa2da3d036d874c020ad10b34d596e20147f0d3c73e8b3904197896d0dd914b093e571d2e699df44632
|
7
|
+
data.tar.gz: 59422402187e49a0ffe1b53f4798f3cab4427aa734bad7cfac8eafdb001e08728a7577f7c5f83ad197a3eaa06007c3a871714ccc8036fca1cf6361a3ed9f7a23
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,34 @@
|
|
2
2
|
# CHANGELOG.md
|
3
3
|
|
4
4
|
|
5
|
+
## fugit 1.5.0 released 2021-06-08
|
6
|
+
|
7
|
+
* Accept "at 12 noon" and "at 12 midday" as "* 12 * * *", gh-57
|
8
|
+
* Accept "at 12pm" as "0 12 * * *", not "0 24 * * *", gh-57
|
9
|
+
* Accept "15/30 * * * *" as "15-59/30 * * * *", gh-56
|
10
|
+
|
11
|
+
|
12
|
+
## fugit 1.4.5 released 2021-04-22
|
13
|
+
|
14
|
+
* Accept "* * * Mon%2+2", gh-47
|
15
|
+
|
16
|
+
|
17
|
+
## fugit 1.4.4 released 2021-03-25
|
18
|
+
|
19
|
+
* Ensure leaving ZH DST is OK, gh-53
|
20
|
+
|
21
|
+
|
22
|
+
## fugit 1.4.3 released 2021-03-23
|
23
|
+
|
24
|
+
* Fix entering DST issue, gh-53
|
25
|
+
|
26
|
+
|
27
|
+
## fugit 1.4.2 released 2021-01-12
|
28
|
+
|
29
|
+
* Fix Fugit::Cron.previous_time vs last day of month, gh-51
|
30
|
+
* Let Fugit::Cron.parse('') return nil, gh-49
|
31
|
+
|
32
|
+
|
5
33
|
## fugit 1.4.1 released 2020-11-25
|
6
34
|
|
7
35
|
* Suppress warning, gh-46, thanks @amatsuda
|
data/CREDITS.md
CHANGED
@@ -1,13 +1,20 @@
|
|
1
1
|
|
2
2
|
# fugit credits
|
3
3
|
|
4
|
+
* Khaled AbuShqear https://github.com/shqear93 gh-57, "12pm"
|
5
|
+
* John W Higgins https://github.com/wishdev gh-56, 15/30 cron decision
|
6
|
+
* Karen Sawrey https://github.com/karensawrey gh-47, Mon%2+1 rework idea
|
7
|
+
* Olle Jonsson https://github.com/olleolleolle gha Ruby 3.0
|
8
|
+
* Andy Pfister https://github.com/andyundso gh-53, entering DST
|
9
|
+
* Solteszad https://github.com/solteszad gh-51, fix previous_time vs last day of month
|
10
|
+
* Niklas https://github.com/gr8bit gh-49, Fugit::Cron.parse('')
|
4
11
|
* Matsuda Akira https://github.com/amatsuda gh-46, warning suppression
|
5
12
|
* Honglooker https://github.com/honglooker gh-43, New York cron skip
|
6
13
|
* Jérôme Dalbert https://github.com/jeromedalbert gh-41, gh-42
|
7
14
|
* Danny Ben Shitrit https://github.com/DannyBen nat variants, gh-38
|
8
15
|
* Dominik Sander https://github.com/dsander #rough_frequency 0, gh-36
|
9
16
|
* Milovan Zogovic https://github.com/assembler Cron#match? vs TZ, gh-31
|
10
|
-
* Jessica Stokes https://github.com/ticky 0-24 issue with cron, gh-30
|
17
|
+
* Jessica Stokes https://github.com/ticky 0-24 issue with cron, gh-30 and gh-47
|
11
18
|
* Shai Coleman https://github.com/shaicoleman parse_nat enhancements, gh-24, gh-25, gh-28, and gh-37
|
12
19
|
* Jan Stevens https://github.com/JanStevens Fugit.parse('every 15 minutes') gh-22
|
13
20
|
* Fabio Pitino https://github.com/hspazio nil on February 30 gh-21
|
data/LICENSE.txt
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
|
2
|
-
Copyright (c) 2017-
|
2
|
+
Copyright (c) 2017-2021, John Mettraux, jmettraux+flor@gmail.com
|
3
3
|
|
4
4
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
5
5
|
of this software and associated documentation files (the "Software"), to deal
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
2
|
# fugit
|
3
3
|
|
4
|
-
[![
|
4
|
+
[![tests](https://github.com/floraison/fugit/workflows/test/badge.svg)](https://github.com/floraison/fugit/actions)
|
5
5
|
[![Gem Version](https://badge.fury.io/rb/fugit.svg)](http://badge.fury.io/rb/fugit)
|
6
6
|
[![Join the chat at https://gitter.im/floraison/fugit](https://badges.gitter.im/floraison/fugit.svg)](https://gitter.im/floraison/fugit?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
7
7
|
|
@@ -138,6 +138,8 @@ Example of cron strings understood by fugit:
|
|
138
138
|
# and more...
|
139
139
|
```
|
140
140
|
|
141
|
+
Please note that `'15/30 * * * *'` is interpreted as `'15-59/30 * * * *'` since fugit 1.4.6.
|
142
|
+
|
141
143
|
### the first Monday of the month
|
142
144
|
|
143
145
|
Fugit tries to follow the `man 5 crontab` documentation.
|
@@ -203,8 +205,22 @@ p EtOrbi.parse('2019-01-01').rweek % 2 # => 1
|
|
203
205
|
p EtOrbi.parse('2019-04-11').wday # => 4
|
204
206
|
p EtOrbi.parse('2019-04-11').rweek # => 15
|
205
207
|
p EtOrbi.parse('2019-04-11').rweek % 2 # => 1
|
208
|
+
|
209
|
+
c = Fugit.parse('* * * * tue%2')
|
210
|
+
c.match?('2019-01-01') # => false, since rweek % 2 == 1
|
211
|
+
c.match?('2019-01-08') # => true, since rweek % 2 == 0
|
212
|
+
|
213
|
+
c = Fugit.parse('* * * * tue%2+1')
|
214
|
+
c.match?('2019-01-01') # => true, since (rweek + 1) % 2 == 0
|
215
|
+
c.match?('2019-01-08') # => false, since (rweek + 1) % 2 == 1
|
216
|
+
|
217
|
+
# ...
|
206
218
|
```
|
207
219
|
|
220
|
+
`sun%2` matches if Sunday and `current_date.rweek % 2 == 0`
|
221
|
+
`tue%3+2` matches if Tuesday and `current_date.rweek + 2 % 3 == 0`
|
222
|
+
`tue%x+y` matches if Tuesday and `current_date.rweek + y % x == 0`
|
223
|
+
|
208
224
|
|
209
225
|
## `Fugit::Duration`
|
210
226
|
|
@@ -350,6 +366,10 @@ Fugit::Nat.parse('every day at 16:15 nada 18:30', multi: true)
|
|
350
366
|
|
351
367
|
`multi: false` is the default behaviour, return a single `Fugit::Cron` instance or nil when it cannot parse.
|
352
368
|
|
369
|
+
### Nat Midnight
|
370
|
+
|
371
|
+
`"Every day at midnight"` is supported, but `"Every monday at midnight"` will be interpreted (as of Fugit <= 1.4.x) as `"Every monday at 00:00"`. Sorry about that.
|
372
|
+
|
353
373
|
|
354
374
|
## LICENSE
|
355
375
|
|
data/lib/fugit.rb
CHANGED
data/lib/fugit/cron.rb
CHANGED
@@ -79,10 +79,7 @@ module Fugit
|
|
79
79
|
%w[ year month day wday hour min sec wday_in_month rweek rday ]
|
80
80
|
.collect(&:to_sym).each { |k| define_method(k) { @t.send(k) } }
|
81
81
|
|
82
|
-
def inc(i)
|
83
|
-
@t = @t + i
|
84
|
-
self
|
85
|
-
end
|
82
|
+
def inc(i); @t = @t + i; self; end
|
86
83
|
def dec(i); inc(-i); end
|
87
84
|
|
88
85
|
def inc_month
|
@@ -95,6 +92,8 @@ module Fugit
|
|
95
92
|
|
96
93
|
def inc_day
|
97
94
|
inc((24 - @t.hour) * 3600 - @t.min * 60 - @t.sec)
|
95
|
+
#inc( - @t.hour * 3600) if @t.hour != 0 # compensate for entering DST
|
96
|
+
inc( - @t.hour * 3600) if @t.hour > 0 && @t.hour < 7
|
98
97
|
end
|
99
98
|
def inc_hour
|
100
99
|
inc((60 - @t.min) * 60 - @t.sec)
|
@@ -112,12 +111,7 @@ module Fugit
|
|
112
111
|
end
|
113
112
|
|
114
113
|
def dec_month
|
115
|
-
|
116
|
-
#dec(@t.day * 24 * 3600 + @t.hour * 3600 + @t.min * 60 + @t.sec + 1)
|
117
|
-
#
|
118
|
-
# gh-18, so that '0 9 29 feb *' doesn't get skipped (over and over)
|
119
|
-
#
|
120
|
-
dec(@t.day * 24 * 3600 + 1)
|
114
|
+
dec((@t.day - 1) * DAY_S + @t.hour * 3600 + @t.min * 60 + @t.sec + 1)
|
121
115
|
end
|
122
116
|
|
123
117
|
def dec_day
|
@@ -156,7 +150,7 @@ module Fugit
|
|
156
150
|
|
157
151
|
def weekday_modulo_match?(nt, mod)
|
158
152
|
|
159
|
-
nt.rweek % mod[0] ==
|
153
|
+
(nt.rweek + mod[1]) % mod[0] == 0
|
160
154
|
end
|
161
155
|
|
162
156
|
def weekday_match?(nt)
|
@@ -337,7 +331,7 @@ module Fugit
|
|
337
331
|
[ :seconds, 1, 60 ],
|
338
332
|
[ :minutes, 60, 60 ],
|
339
333
|
[ :hours, 3600, 24 ],
|
340
|
-
[ :days,
|
334
|
+
[ :days, DAY_S, 365 ] ].freeze
|
341
335
|
|
342
336
|
def rough_frequency
|
343
337
|
|
@@ -379,7 +373,7 @@ module Fugit
|
|
379
373
|
|
380
374
|
@delta_min = deltas.min; @delta_max = deltas.max
|
381
375
|
@occurrences = deltas.size
|
382
|
-
@span_years = span /
|
376
|
+
@span_years = span / YEAR_S
|
383
377
|
@yearly_occurrences = @occurrences.to_f / @span_years
|
384
378
|
end
|
385
379
|
|
@@ -491,6 +485,8 @@ module Fugit
|
|
491
485
|
|
492
486
|
sla = nil if sla == 1 # don't get fooled by /1
|
493
487
|
|
488
|
+
edn = max if sla && edn.nil?
|
489
|
+
|
494
490
|
return [ nil ] if sta.nil? && edn.nil? && sla.nil?
|
495
491
|
return [ sta ] if sta && edn.nil?
|
496
492
|
|
@@ -780,8 +776,12 @@ module Fugit
|
|
780
776
|
|
781
777
|
def rewrite_cron(t)
|
782
778
|
|
783
|
-
|
779
|
+
st = t
|
784
780
|
.sublookup(nil) # go to :ccron or :scron
|
781
|
+
|
782
|
+
return nil unless st
|
783
|
+
|
784
|
+
hcron = st
|
785
785
|
.subgather(nil) # list min, hou, mon, ...
|
786
786
|
.inject({}) { |h, tt|
|
787
787
|
h[tt.name] = tt.name == :tz ? rewrite_tz(tt) : rewrite_entry(tt)
|
data/lib/fugit/duration.rb
CHANGED
@@ -61,10 +61,10 @@ module Fugit
|
|
61
61
|
end
|
62
62
|
|
63
63
|
KEYS = {
|
64
|
-
yea: { a: 'Y', r: 'y', i: 'Y', s:
|
65
|
-
mon: { a: 'M', r: 'M', i: 'M', s: 30 *
|
66
|
-
wee: { a: 'W', r: 'w', i: 'W', s: 7 *
|
67
|
-
day: { a: 'D', r: 'd', i: 'D', s:
|
64
|
+
yea: { a: 'Y', r: 'y', i: 'Y', s: YEAR_S, x: 0, l: 'year' },
|
65
|
+
mon: { a: 'M', r: 'M', i: 'M', s: 30 * DAY_S, x: 1, l: 'month' },
|
66
|
+
wee: { a: 'W', r: 'w', i: 'W', s: 7 * DAY_S, I: true, l: 'week' },
|
67
|
+
day: { a: 'D', r: 'd', i: 'D', s: DAY_S, I: true, l: 'day' },
|
68
68
|
hou: { a: 'h', r: 'h', i: 'H', s: 3600, I: true, l: 'hour' },
|
69
69
|
min: { a: 'm', r: 'm', i: 'M', s: 60, I: true, l: 'minute' },
|
70
70
|
sec: { a: 's', r: 's', i: 'S', s: 1, I: true, l: 'second' } }.freeze
|
data/lib/fugit/misc.rb
CHANGED
data/lib/fugit/nat.rb
CHANGED
@@ -201,7 +201,7 @@ module Fugit
|
|
201
201
|
end
|
202
202
|
|
203
203
|
def ampm(i)
|
204
|
-
rex(:ampm, i, /[ \t]*(am|pm)/i)
|
204
|
+
rex(:ampm, i, /[ \t]*(am|pm|noon|midday|midnight)/i)
|
205
205
|
end
|
206
206
|
def dark(i)
|
207
207
|
rex(:dark, i, /[ \t]*dark/i)
|
@@ -473,17 +473,21 @@ module Fugit
|
|
473
473
|
slot(:monthday, "#{md0}-#{md1}")
|
474
474
|
end
|
475
475
|
|
476
|
+
def adjust_h(h, ap)
|
477
|
+
h = h.to_i
|
478
|
+
ap = ap || ''
|
479
|
+
(h < 12 && ap == 'pm' || ap == 'midnight') ? h + 12 : h
|
480
|
+
end
|
481
|
+
|
476
482
|
def rewrite_digital_hour(t)
|
477
483
|
h, m, ap = t.strinpd.split(/[: \t]+/)
|
478
|
-
h, m = h
|
479
|
-
h
|
480
|
-
slot(:hm, h.to_i, m.to_i)
|
484
|
+
h, m = adjust_h(h, ap), m.to_i
|
485
|
+
slot(:hm, h, m)
|
481
486
|
end
|
482
487
|
|
483
488
|
def rewrite_simple_hour(t)
|
484
489
|
h, ap = t.subgather(nil).collect(&:strinpd)
|
485
|
-
h = h
|
486
|
-
h = h + 12 if ap == 'pm'
|
490
|
+
h = adjust_h(h, ap)
|
487
491
|
slot(:hm, h, 0)
|
488
492
|
end
|
489
493
|
|
@@ -500,7 +504,7 @@ module Fugit
|
|
500
504
|
m = NMINUTES[m] || m
|
501
505
|
#p [ 1, '-->', h, m ]
|
502
506
|
|
503
|
-
h
|
507
|
+
h = adjust_h(h, apt && apt.strinpd)
|
504
508
|
|
505
509
|
slot(:hm, h, m)
|
506
510
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fugit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Mettraux
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-06-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: raabro
|