fugit 1.2.3 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +15 -0
- data/lib/fugit.rb +1 -1
- data/lib/fugit/nat.rb +52 -14
- 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: 57336fd846b610ad0c361564a8025f3ccb752025
|
4
|
+
data.tar.gz: 4effff19a32313a7eefad03b6ba1eebe1d056e62
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 429bc3055890b87c7a1cb78da8d713844f73de3bc162295ce7e0688179800caec9c5bb96b792276b1bf71ee40de1cee50070553ccbeb98e6150abe7b168b3f9c
|
7
|
+
data.tar.gz: 95fa1fc74e5ebdef176edd772d7978f8c845ecd9d9e465450ae3d61d6d7cebca89bca8cb43cc1e1e4986ff22a392fb08c58525d4ed5c5a9cd31ee8539efd4738
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,12 @@
|
|
2
2
|
# CHANGELOG.md
|
3
3
|
|
4
4
|
|
5
|
+
## fugit 1.3.0 released 2019-07-21
|
6
|
+
|
7
|
+
* Introduce Fugit.parse_nat('every day at 18:00 and 19:15', multi: true)
|
8
|
+
* Rework AM/PM parsing
|
9
|
+
|
10
|
+
|
5
11
|
## fugit 1.2.3 released 2019-07-16
|
6
12
|
|
7
13
|
* Allow for "from Monday to Friday at 19:22", gh-25
|
data/README.md
CHANGED
@@ -250,6 +250,21 @@ Directly with `Fugit.parse(s)` is OK too:
|
|
250
250
|
Fugit.parse('every day at five') # ==> Fugit::Cron instance '0 5 * * *'
|
251
251
|
```
|
252
252
|
|
253
|
+
### Ambiguous nats
|
254
|
+
|
255
|
+
Not all strings result in a clean, single, cron expression.
|
256
|
+
|
257
|
+
```ruby
|
258
|
+
Fugit::Nat.parse('every day at 16:00 and 18:00', multi: true)
|
259
|
+
# ==> [ '0 16,18 * * *' ]
|
260
|
+
Fugit::Nat.parse('every day at 16:15 and 18:30')
|
261
|
+
# ==> [ '15 16 * * *' ]
|
262
|
+
Fugit::Nat.parse('every day at 16:15 and 18:30', multi: true)
|
263
|
+
# ==> [ '15 16 * * *', '30 18 * * *' ]
|
264
|
+
Fugit::Nat.parse('every day at 16:15 and 18:30', multi: :fail)
|
265
|
+
# ==> ArgumentError: multiple crons in "every day at 16:15 and 18:30" (15 16 * * * | 30 18 * * *)
|
266
|
+
```
|
267
|
+
|
253
268
|
|
254
269
|
## LICENSE
|
255
270
|
|
data/lib/fugit.rb
CHANGED
data/lib/fugit/nat.rb
CHANGED
@@ -19,9 +19,9 @@ module Fugit
|
|
19
19
|
|
20
20
|
return nil unless a
|
21
21
|
|
22
|
-
return
|
22
|
+
return parse_crons(s, a, opts) \
|
23
23
|
if a.include?([ :flag, 'every' ])
|
24
|
-
return
|
24
|
+
return parse_crons(s, a, opts) \
|
25
25
|
if a.include?([ :flag, 'from' ]) && a.find { |e| e[0] == :day_range }
|
26
26
|
|
27
27
|
nil
|
@@ -33,7 +33,35 @@ module Fugit
|
|
33
33
|
fail(ArgumentError.new("could not parse a nat #{s.inspect}"))
|
34
34
|
end
|
35
35
|
|
36
|
-
|
36
|
+
protected
|
37
|
+
|
38
|
+
def parse_crons(s, a, opts)
|
39
|
+
|
40
|
+
dhs, aa =
|
41
|
+
a.partition { |e| e[0] == :digital_hour }
|
42
|
+
dms =
|
43
|
+
dhs.collect { |dh| dh[1][1] }.uniq
|
44
|
+
|
45
|
+
crons =
|
46
|
+
if dhs.empty? || dms.size == 1
|
47
|
+
[ parse_cron(a, opts) ]
|
48
|
+
else
|
49
|
+
dhs.collect { |dh| parse_cron([ dh ] + aa, opts) }
|
50
|
+
end
|
51
|
+
|
52
|
+
fail ArgumentError.new(
|
53
|
+
"multiple crons in #{s.inspect} " +
|
54
|
+
"(#{crons.collect(&:original).join(' | ')})"
|
55
|
+
) if opts[:multi] == :fail && crons.size > 1
|
56
|
+
|
57
|
+
if opts[:multi]
|
58
|
+
crons
|
59
|
+
else
|
60
|
+
crons.first
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def parse_cron(a, opts)
|
37
65
|
|
38
66
|
h = { min: nil, hou: [], dom: nil, mon: nil, dow: nil }
|
39
67
|
hkeys = h.keys
|
@@ -50,8 +78,6 @@ module Fugit
|
|
50
78
|
(h[:dow] ||= []) << val
|
51
79
|
elsif key == :day_range
|
52
80
|
(h[:dow] ||= []) << val.collect { |v| v.to_s[0, 3] }.join('-')
|
53
|
-
elsif key == :flag && val == 'pm' && h[:hou]
|
54
|
-
h[:hou][-1] = h[:hou][-1] + 12
|
55
81
|
elsif key == :tz
|
56
82
|
h[:tz] = val
|
57
83
|
elsif key == :duration
|
@@ -75,8 +101,6 @@ module Fugit
|
|
75
101
|
Fugit::Cron.parse(s)
|
76
102
|
end
|
77
103
|
|
78
|
-
protected
|
79
|
-
|
80
104
|
def process_duration(h, interval, value)
|
81
105
|
|
82
106
|
send("process_duration_#{interval}", h, value)
|
@@ -129,15 +153,28 @@ module Fugit
|
|
129
153
|
|
130
154
|
# piece parsers bottom to top
|
131
155
|
|
156
|
+
def am_pm(i)
|
157
|
+
rex(:am_pm, i, / *(am|pm)/i)
|
158
|
+
end
|
159
|
+
|
132
160
|
def digital_hour(i)
|
133
161
|
rex(:digital_hour, i, /(2[0-4]|[01][0-9]):?[0-5]\d/)
|
134
162
|
end
|
163
|
+
|
164
|
+
def _simple_hour(i)
|
165
|
+
rex(:sh, i, /(2[0-4]|[01]?[0-9])/)
|
166
|
+
end
|
135
167
|
def simple_hour(i)
|
136
|
-
|
168
|
+
seq(:simple_hour, i, :_simple_hour, :am_pm, '?')
|
169
|
+
end
|
170
|
+
|
171
|
+
def _numeral_hour(i)
|
172
|
+
rex(:nh, i, /(#{NUMS.join('|')})/i)
|
137
173
|
end
|
138
174
|
def numeral_hour(i)
|
139
|
-
|
175
|
+
seq(:numeral_hour, i, :_numeral_hour, :am_pm, '?')
|
140
176
|
end
|
177
|
+
|
141
178
|
def name_hour(i)
|
142
179
|
rex(:name_hour, i, /(#{NHOURS.keys.join('|')})/i)
|
143
180
|
end
|
@@ -170,7 +207,7 @@ module Fugit
|
|
170
207
|
/ix)
|
171
208
|
end
|
172
209
|
|
173
|
-
def flag(i); rex(:flag, i, /(every|from|at|after|
|
210
|
+
def flag(i); rex(:flag, i, /(every|from|at|after|on|in)/i); end
|
174
211
|
|
175
212
|
def datum(i)
|
176
213
|
alt(nil, i,
|
@@ -204,10 +241,6 @@ module Fugit
|
|
204
241
|
[ k, [ tt.string.strip, EtOrbi.get_tzone(tt.string.strip) ] ]
|
205
242
|
when :duration
|
206
243
|
[ k, [ Fugit::Duration.parse(tt.string.strip) ] ]
|
207
|
-
when :numeral_hour
|
208
|
-
[ k, NUMS.index(v) ]
|
209
|
-
when :simple_hour
|
210
|
-
[ k, v.to_i ]
|
211
244
|
when :digital_hour
|
212
245
|
v = v.gsub(/:/, '')
|
213
246
|
[ k, [ v[0, 2], v[2, 2] ] ]
|
@@ -217,6 +250,11 @@ module Fugit
|
|
217
250
|
[ k, WEEKDAYS.index(v[0, 3]) ]
|
218
251
|
when :day_range
|
219
252
|
[ k, tt.subgather(nil).collect { |st| st.string.downcase } ]
|
253
|
+
when :numeral_hour, :simple_hour
|
254
|
+
vs = tt.subgather(nil).collect { |ttt| ttt.string.downcase.strip }
|
255
|
+
v = k == :simple_hour ? vs[0].to_i : NUMS.index(vs[0])
|
256
|
+
v += 12 if vs[1] == 'pm'
|
257
|
+
[ k, v ]
|
220
258
|
else
|
221
259
|
[ k, v ]
|
222
260
|
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.3.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: 2019-07-
|
11
|
+
date: 2019-07-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: raabro
|