fugit 1.2.2 → 1.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/CREDITS.md +1 -0
- data/README.md +34 -0
- data/lib/fugit.rb +1 -1
- data/lib/fugit/nat.rb +30 -12
- data/lib/fugit/parse.rb +3 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4814a18c1285406d94b93d1ae579c0e26f541653
|
4
|
+
data.tar.gz: 74fa964320d7596ee309edf6f418f714893ae813
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1e6039af8e976c6839e34e84f7c2d17eddbde91acd12b91f1f113c2946aac5826a384a55d8fc6d5cdf0042f864ca8ba35882e5a96fc5d04467c0825084641c8a
|
7
|
+
data.tar.gz: c02ee46cf23803f967b086bfa14a19137339733bc73a732358c721e6ce88384d7b432fedb7a2dea22f25913c32316a1a1210ca6d63bbf0f600d79ae192b0ec46
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,13 @@
|
|
2
2
|
# CHANGELOG.md
|
3
3
|
|
4
4
|
|
5
|
+
## fugit 1.2.3 released 2019-07-16
|
6
|
+
|
7
|
+
* Allow for "from Monday to Friday at 19:22", gh-25
|
8
|
+
* Allow for "every Monday to Friday at 18:20", gh-25
|
9
|
+
* Allow for "every day at 18:00 and 20:00", gh-24
|
10
|
+
|
11
|
+
|
5
12
|
## fugit 1.2.2 released 2019-06-21
|
6
13
|
|
7
14
|
* Fix Fugit.parse vs "every 15 minutes", gh-22
|
data/CREDITS.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
|
2
2
|
# fugit credits
|
3
3
|
|
4
|
+
* Shai Coleman https://github.com/shaicoleman parse_nat enhancements, gh-24 and gh-25
|
4
5
|
* Jan Stevens https://github.com/JanStevens Fugit.parse('every 15 minutes') gh-22
|
5
6
|
* Fabio Pitino https://github.com/hspazio nil on February 30 gh-21
|
6
7
|
* Cristian Oneț https://github.com/conet #previous_time vs 1/-1 endless loop gh-15
|
data/README.md
CHANGED
@@ -54,6 +54,39 @@ Fugit.parse('2017-12-12 UTC').class # ==> ::EtOrbi::EoTime
|
|
54
54
|
Fugit.parse('every day at noon').class # ==> ::Fugit::Cron
|
55
55
|
```
|
56
56
|
|
57
|
+
If fugit cannot extract a cron, duration or point in time out of the string, it will return nil.
|
58
|
+
```ruby
|
59
|
+
Fugit.parse('nada')
|
60
|
+
# ==> nil
|
61
|
+
```
|
62
|
+
|
63
|
+
## `Fugit.do_parse(s)`
|
64
|
+
|
65
|
+
`Fugit.do_parse(s)` is equivalent to `Fugit.parse(s)`, but instead of returning nil, it raises an error if the given string contains no time information.
|
66
|
+
```
|
67
|
+
Fugit.do_parse('nada')
|
68
|
+
# ==> /home/jmettraux/w/fugit/lib/fugit/parse.rb:32
|
69
|
+
# :in `do_parse': found no time information in "nada" (ArgumentError)
|
70
|
+
```
|
71
|
+
|
72
|
+
## parse_cron, parse_in, parse_at, parse_duration, and parse_nat
|
73
|
+
|
74
|
+
```ruby
|
75
|
+
require 'fugit'
|
76
|
+
|
77
|
+
Fugit.parse_cron('0 0 1 jan *').class # ==> ::Fugit::Cron
|
78
|
+
Fugit.parse_duration('12y12M').class # ==> ::Fugit::Duration
|
79
|
+
|
80
|
+
Fugit.parse_at('2017-12-12').class # ==> ::EtOrbi::EoTime
|
81
|
+
Fugit.parse_at('2017-12-12 UTC').class # ==> ::EtOrbi::EoTime
|
82
|
+
|
83
|
+
Fugit.parse_nat('every day at noon').class # ==> ::Fugit::Cron
|
84
|
+
```
|
85
|
+
|
86
|
+
## do_parse_cron, do_parse_in, do_parse_at, do_parse_duration, and do_parse_nat
|
87
|
+
|
88
|
+
As `Fugit.parse(s)` returns nil when it doesn't grok its input, and `Fugit.do_parse(s)` fails when it doesn't grok, each of the `parse_` methods has its partner `do_parse_` method.
|
89
|
+
|
57
90
|
## `Fugit::Cron`
|
58
91
|
|
59
92
|
A class `Fugit::Cron` to parse cron strings and then `#next_time` and `#previous_time` to compute the next or the previous occurrence respectively.
|
@@ -199,6 +232,7 @@ Fugit::Nat.parse('every day at 5 pm') # ==> '0 17 * * *'
|
|
199
232
|
Fugit::Nat.parse('every tuesday at 5 pm') # ==> '0 17 * * 2'
|
200
233
|
Fugit::Nat.parse('every wed at 5 pm') # ==> '0 17 * * 3'
|
201
234
|
Fugit::Nat.parse('every day at 16:30') # ==> '30 16 * * *'
|
235
|
+
Fugit::Nat.parse('every day at 16:00 and 18:00') # ==> '0 16,18 * * *'
|
202
236
|
Fugit::Nat.parse('every day at noon') # ==> '0 12 * * *'
|
203
237
|
Fugit::Nat.parse('every day at midnight') # ==> '0 0 * * *'
|
204
238
|
Fugit::Nat.parse('every tuesday and monday at 5pm') # ==> '0 17 * * 1,2'
|
data/lib/fugit.rb
CHANGED
data/lib/fugit/nat.rb
CHANGED
@@ -8,7 +8,7 @@ module Fugit
|
|
8
8
|
|
9
9
|
class << self
|
10
10
|
|
11
|
-
def parse(s)
|
11
|
+
def parse(s, opts={})
|
12
12
|
|
13
13
|
return s if s.is_a?(Fugit::Cron) || s.is_a?(Fugit::Duration)
|
14
14
|
|
@@ -17,20 +17,23 @@ module Fugit
|
|
17
17
|
#p s; Raabro.pp(Parser.parse(s, debug: 3), colours: true)
|
18
18
|
a = Parser.parse(s)
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
20
|
+
return nil unless a
|
21
|
+
|
22
|
+
return parse_cron(a, opts) \
|
23
|
+
if a.include?([ :flag, 'every' ])
|
24
|
+
return parse_cron(a, opts) \
|
25
|
+
if a.include?([ :flag, 'from' ]) && a.find { |e| e[0] == :day_range }
|
26
|
+
|
27
|
+
nil
|
25
28
|
end
|
26
29
|
|
27
|
-
def do_parse(s)
|
30
|
+
def do_parse(s, opts={})
|
28
31
|
|
29
|
-
parse(s) ||
|
32
|
+
parse(s, opts) ||
|
30
33
|
fail(ArgumentError.new("could not parse a nat #{s.inspect}"))
|
31
34
|
end
|
32
35
|
|
33
|
-
def parse_cron(a)
|
36
|
+
def parse_cron(a, opts={})
|
34
37
|
|
35
38
|
h = { min: nil, hou: [], dom: nil, mon: nil, dow: nil }
|
36
39
|
hkeys = h.keys
|
@@ -41,10 +44,12 @@ module Fugit
|
|
41
44
|
elsif key == :simple_hour || key == :numeral_hour
|
42
45
|
h[:hou] << val
|
43
46
|
elsif key == :digital_hour
|
44
|
-
h[:hou]
|
45
|
-
h[:min]
|
47
|
+
(h[:hou] ||= []) << val[0].to_i
|
48
|
+
(h[:min] ||= []) << val[1].to_i
|
46
49
|
elsif key == :name_day
|
47
50
|
(h[:dow] ||= []) << val
|
51
|
+
elsif key == :day_range
|
52
|
+
(h[:dow] ||= []) << val.collect { |v| v.to_s[0, 3] }.join('-')
|
48
53
|
elsif key == :flag && val == 'pm' && h[:hou]
|
49
54
|
h[:hou][-1] = h[:hou][-1] + 12
|
50
55
|
elsif key == :tz
|
@@ -54,6 +59,7 @@ module Fugit
|
|
54
59
|
end
|
55
60
|
end
|
56
61
|
h[:min] ||= [ 0 ]
|
62
|
+
h[:min].uniq!
|
57
63
|
h[:hou].sort! if h[:hou]
|
58
64
|
h[:dow].sort! if h[:dow]
|
59
65
|
|
@@ -65,9 +71,12 @@ module Fugit
|
|
65
71
|
a << h[:tz].first if h[:tz]
|
66
72
|
s = a.join(' ')
|
67
73
|
|
74
|
+
#p s
|
68
75
|
Fugit::Cron.parse(s)
|
69
76
|
end
|
70
77
|
|
78
|
+
protected
|
79
|
+
|
71
80
|
def process_duration(h, interval, value)
|
72
81
|
|
73
82
|
send("process_duration_#{interval}", h, value)
|
@@ -137,6 +146,12 @@ module Fugit
|
|
137
146
|
def biz_day(i); rex(:biz_day, i, /(biz|business|week) *day/i); end
|
138
147
|
def name_day(i); rex(:name_day, i, /#{WEEKDAYS.reverse.join('|')}/i); end
|
139
148
|
|
149
|
+
def range_sep(i); rex(nil, i, / *- *| +(to|through) +/); end
|
150
|
+
|
151
|
+
def day_range(i)
|
152
|
+
seq(:day_range, i, :name_day, :range_sep, :name_day)
|
153
|
+
end
|
154
|
+
|
140
155
|
def _tz_name(i)
|
141
156
|
rex(nil, i, /[A-Z][a-zA-Z0-9+\-]+(\/[A-Z][a-zA-Z0-9+\-_]+){0,2}/)
|
142
157
|
end
|
@@ -155,10 +170,11 @@ module Fugit
|
|
155
170
|
/ix)
|
156
171
|
end
|
157
172
|
|
158
|
-
def flag(i); rex(:flag, i, /(every|at|after|am|pm|on|in)/i); end
|
173
|
+
def flag(i); rex(:flag, i, /(every|from|at|after|am|pm|on|in)/i); end
|
159
174
|
|
160
175
|
def datum(i)
|
161
176
|
alt(nil, i,
|
177
|
+
:day_range,
|
162
178
|
:plain_day, :biz_day, :name_day,
|
163
179
|
:_tz,
|
164
180
|
:flag,
|
@@ -199,6 +215,8 @@ module Fugit
|
|
199
215
|
[ :digital_hour, NHOURS[v] ]
|
200
216
|
when :name_day
|
201
217
|
[ k, WEEKDAYS.index(v[0, 3]) ]
|
218
|
+
when :day_range
|
219
|
+
[ k, tt.subgather(nil).collect { |st| st.string.downcase } ]
|
202
220
|
else
|
203
221
|
[ k, v ]
|
204
222
|
end }
|
data/lib/fugit/parse.rb
CHANGED
@@ -5,13 +5,13 @@ module Fugit
|
|
5
5
|
|
6
6
|
def parse_cron(s); ::Fugit::Cron.parse(s); end
|
7
7
|
def parse_duration(s); ::Fugit::Duration.parse(s); end
|
8
|
-
def parse_nat(s); ::Fugit::Nat.parse(s); end
|
8
|
+
def parse_nat(s, opts={}); ::Fugit::Nat.parse(s, opts); end
|
9
9
|
def parse_at(s); ::Fugit::At.parse(s); end
|
10
10
|
def parse_in(s); parse_duration(s); end
|
11
11
|
|
12
12
|
def do_parse_cron(s); ::Fugit::Cron.do_parse(s); end
|
13
13
|
def do_parse_duration(s); ::Fugit::Duration.do_parse(s); end
|
14
|
-
def do_parse_nat(s); ::Fugit::Nat.do_parse(s); end
|
14
|
+
def do_parse_nat(s, opts={}); ::Fugit::Nat.do_parse(s, opts); end
|
15
15
|
def do_parse_at(s); ::Fugit::At.do_parse(s); end
|
16
16
|
def do_parse_in(s); do_parse_duration(s); end
|
17
17
|
|
@@ -21,7 +21,7 @@ module Fugit
|
|
21
21
|
|
22
22
|
(opts[:cron] != false && parse_cron(s)) ||
|
23
23
|
(opts[:duration] != false && parse_duration(s)) ||
|
24
|
-
(opts[:nat] != false && parse_nat(s)) ||
|
24
|
+
(opts[:nat] != false && parse_nat(s, opts)) ||
|
25
25
|
(opts[:at] != false && parse_at(s)) ||
|
26
26
|
nil
|
27
27
|
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.2.
|
4
|
+
version: 1.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Mettraux
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-07-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: raabro
|