fugit 1.2.3 → 1.3.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 +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
|