Module: Fugit::Nat
- Defined in:
- lib/fugit/nat.rb
Overview
A natural language set of parsers for fugit. Focuses on cron expressions. The rest is better left to Chronic and friends.
Defined Under Namespace
Modules: Parser
Class Method Summary collapse
- .do_parse(s) ⇒ Object
- .parse(s) ⇒ Object
- .parse_cron(a) ⇒ Object
- .process_duration(h, interval, value) ⇒ Object
- .process_duration_day(h, value) ⇒ Object
- .process_duration_hou(h, value) ⇒ Object
- .process_duration_min(h, value) ⇒ Object
- .process_duration_mon(h, value) ⇒ Object
- .process_duration_sec(h, value) ⇒ Object
Class Method Details
.do_parse(s) ⇒ Object
27 28 29 30 31 |
# File 'lib/fugit/nat.rb', line 27 def do_parse(s) parse(s) || fail(ArgumentError.new("could not parse a nat #{s.inspect}")) end |
.parse(s) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/fugit/nat.rb', line 11 def parse(s) return s if s.is_a?(Fugit::Cron) || s.is_a?(Fugit::Duration) return nil unless s.is_a?(String) #p s; Raabro.pp(Parser.parse(s, debug: 3), colours: true) a = Parser.parse(s) if a && a.include?([ :flag, 'every' ]) parse_cron(a) else nil end end |
.parse_cron(a) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/fugit/nat.rb', line 33 def parse_cron(a) h = { min: nil, hou: [], dom: [ nil ], mon: [ nil ], dow: [ nil ] } a.each do |key, val| if key == :biz_day h[:dow] = [ [ 1, 5 ] ] elsif key == :simple_hour || key == :numeral_hour (h[:hou] ||= []) << [ val ] elsif key == :digital_hour h[:hou] = [ val[0, 1] ] h[:min] = [ val[1, 1] ] elsif key == :name_day (h[:dow] ||= []) << [ val ] elsif key == :flag && val == 'pm' && h[:hou] h[:hou][-1] = [ h[:hou][-1].first + 12 ] elsif key == :tz h[:tz] = val elsif key == :duration process_duration(h, *val[0].to_h.first) end end h[:min] ||= [ 0 ] h[:dow].sort_by! { |d, _| d || 0 } Fugit::Cron.allocate.send(:init, nil, h) end |
.process_duration(h, interval, value) ⇒ Object
61 62 63 64 |
# File 'lib/fugit/nat.rb', line 61 def process_duration(h, interval, value) send("process_duration_#{interval}", h, value) end |
.process_duration_day(h, value) ⇒ Object
73 74 75 76 77 |
# File 'lib/fugit/nat.rb', line 73 def process_duration_day(h, value) h[:hou] = [ 0 ] h[:dom] = [ value == 1 ? '*' : "*/#{value}" ] end |
.process_duration_hou(h, value) ⇒ Object
79 80 81 82 |
# File 'lib/fugit/nat.rb', line 79 def process_duration_hou(h, value) h[:hou] = [ value == 1 ? '*' : "*/#{value}" ] end |
.process_duration_min(h, value) ⇒ Object
84 85 86 87 88 |
# File 'lib/fugit/nat.rb', line 84 def process_duration_min(h, value) h[:hou] = [ '*' ] h[:min] = [ value == 1 ? '*' : "*/#{value}" ] end |
.process_duration_mon(h, value) ⇒ Object
66 67 68 69 70 71 |
# File 'lib/fugit/nat.rb', line 66 def process_duration_mon(h, value) h[:hou] = [ 0 ] h[:dom] = [ 1 ] h[:mon] = [ value == 1 ? '*' : "*/#{value}" ] end |
.process_duration_sec(h, value) ⇒ Object
90 91 92 93 94 95 |
# File 'lib/fugit/nat.rb', line 90 def process_duration_sec(h, value) h[:hou] = [ '*' ] h[:min] = [ '*' ] h[:sec] = [ value == 1 ? '*' : "*/#{value}" ] end |