module Fugit::Cron::Parser

Constants

DOW_REX
MONTHS
MONTH_REX
WEEKDAYS
WEEKDS

Public Instance Methods

_dom(i) click to toggle source
# File lib/fugit/cron.rb, line 688
def _dom(i); seq(nil, i, :hyphen, :dom); end
_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 690
def _dow(i); seq(nil, i, :hyphen, :dow); end
_hou(i) click to toggle source
# File lib/fugit/cron.rb, line 687
def _hou(i); seq(nil, i, :hyphen, :hou); end
_mon(i) click to toggle source
# File lib/fugit/cron.rb, line 689
def _mon(i); seq(nil, i, :hyphen, :mon); end
_mos(i) click to toggle source
# File lib/fugit/cron.rb, line 686
def _mos(i); seq(nil, i, :hyphen, :mos); end
_tz(i) click to toggle source
# File lib/fugit/cron.rb, line 747
def _tz(i); alt(:tz, i, :_tz_delta, :_tz_name); end
_tz_delta(i) click to toggle source
# File lib/fugit/cron.rb, line 744
def _tz_delta(i)
  rex(nil, i, / +[-+]([01][0-9]|2[0-4]):?(00|15|30|45)/)
end
_tz_name(i) click to toggle source
# File lib/fugit/cron.rb, line 741
def _tz_name(i)
  rex(nil, i, / +[A-Z][a-zA-Z0-9+\-]+(\/[A-Z][a-zA-Z0-9+\-_]+){0,2}/)
end
and?(i) click to toggle source
# File lib/fugit/cron.rb, line 674
def and?(i); rex(nil, i, /&?/); end
classic_cron(i) click to toggle source
# File lib/fugit/cron.rb, line 749
def classic_cron(i)
  seq(:ccron, i,
    :lmin_, :lhou_, :ldom_, :lmon_, :ldow, :_tz, '?')
end
comma(i) click to toggle source
# File lib/fugit/cron.rb, line 672
def comma(i); rex(nil, i, /,([ \t]*,)*/); end
comma?(i) click to toggle source
# File lib/fugit/cron.rb, line 673
def comma?(i); rex(nil, i, /([ \t]*,)*/); end
cron(i) click to toggle source
# File lib/fugit/cron.rb, line 758
def cron(i)
  alt(:cron, i, :second_cron, :classic_cron)
end
dom(i) click to toggle source
# File lib/fugit/cron.rb, line 680
def dom(i); rex(:dom, i, /(-?(3[01]|[12][0-9]|0?[1-9])|last|l)/i); end
dom_elt(i) click to toggle source
# File lib/fugit/cron.rb, line 716
def dom_elt(i); alt(:elt, i, :slash, :sorws_dom); end
dow(i) click to toggle source
# File lib/fugit/cron.rb, line 682
def dow(i); rex(:dow, i, DOW_REX); end
dow_elt(i) click to toggle source
# File lib/fugit/cron.rb, line 718
def dow_elt(i); alt(:elt, i, :slash, :sorws_dow); end
dow_elt_(i) click to toggle source
# File lib/fugit/cron.rb, line 725
def dow_elt_(i); alt(nil, i, :h_dow, :mod_dow, :dow_elt); end
dow_hash(i) click to toggle source
# File lib/fugit/cron.rb, line 684
def dow_hash(i); rex(:hash, i, /#(-?[1-5]|last|l)/i); end
h_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 723
def h_dow(i); seq(:elt, i, :dow, :dow_hash); end
hou(i) click to toggle source
# File lib/fugit/cron.rb, line 679
def hou(i); rex(:hou, i, /(2[0-4]|[01]?[0-9])/); end
hou_elt(i) click to toggle source
# File lib/fugit/cron.rb, line 715
def hou_elt(i); alt(:elt, i, :slash, :sorws_hou); end
hyphen(i) click to toggle source
# File lib/fugit/cron.rb, line 671
def hyphen(i); str(nil, i, '-'); end
ldom_(i) click to toggle source
# File lib/fugit/cron.rb, line 737
def ldom_(i); seq(nil, i, :comma?, :list_dom, :comma?, :and?, :s); end
ldow(i) click to toggle source
# File lib/fugit/cron.rb, line 739
def ldow(i); seq(nil, i, :comma?, :list_dow, :comma?, :and?); end
lhou_(i) click to toggle source
# File lib/fugit/cron.rb, line 736
def lhou_(i); seq(nil, i, :comma?, :list_hou, :comma?, :s); end
list_dom(i) click to toggle source
# File lib/fugit/cron.rb, line 730
def list_dom(i); jseq(:dom, i, :dom_elt, :comma); end
list_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 732
def list_dow(i); jseq(:dow, i, :dow_elt_, :comma); end
list_hou(i) click to toggle source
# File lib/fugit/cron.rb, line 729
def list_hou(i); jseq(:hou, i, :hou_elt, :comma); end
list_min(i) click to toggle source
# File lib/fugit/cron.rb, line 728
def list_min(i); jseq(:min, i, :mos_elt, :comma); end
list_mon(i) click to toggle source
# File lib/fugit/cron.rb, line 731
def list_mon(i); jseq(:mon, i, :mon_elt, :comma); end
list_sec(i) click to toggle source
# File lib/fugit/cron.rb, line 727
def list_sec(i); jseq(:sec, i, :mos_elt, :comma); end
lmin_(i) click to toggle source
# File lib/fugit/cron.rb, line 735
def lmin_(i); seq(nil, i, :comma?, :list_min, :comma?, :s); end
lmon_(i) click to toggle source
# File lib/fugit/cron.rb, line 738
def lmon_(i); seq(nil, i, :comma?, :list_mon, :comma?, :s); end
lsec_(i) click to toggle source
# File lib/fugit/cron.rb, line 734
def lsec_(i); seq(nil, i, :comma?, :list_sec, :comma?, :s); end
mod(i) click to toggle source
# File lib/fugit/cron.rb, line 720
def mod(i); rex(:mod, i, /%\d+(\+\d+)?/); end
mod_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 722
def mod_dow(i); seq(:elt, i, :dow, :mod); end
mon(i) click to toggle source
# File lib/fugit/cron.rb, line 681
def mon(i); rex(:mon, i, MONTH_REX); end
mon_elt(i) click to toggle source
# File lib/fugit/cron.rb, line 717
def mon_elt(i); alt(:elt, i, :slash, :sorws_mon); end
mos(i) click to toggle source
# File lib/fugit/cron.rb, line 678
def mos(i); rex(:mos, i, /[0-5]?\d/); end
mos_elt(i) click to toggle source

ssws: slash or sorws

# File lib/fugit/cron.rb, line 714
def mos_elt(i); alt(:elt, i, :slash, :sorws_mos); end
r_dom(i) click to toggle source
# File lib/fugit/cron.rb, line 695
def r_dom(i); seq(nil, i, :dom, :_dom, '?'); end
r_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 697
def r_dow(i); seq(nil, i, :dow, :_dow, '?'); end
r_hou(i) click to toggle source
# File lib/fugit/cron.rb, line 694
def r_hou(i); seq(nil, i, :hou, :_hou, '?'); end
r_mon(i) click to toggle source
# File lib/fugit/cron.rb, line 696
def r_mon(i); seq(nil, i, :mon, :_mon, '?'); end
r_mos(i) click to toggle source

r: range

# File lib/fugit/cron.rb, line 693
def r_mos(i); seq(nil, i, :mos, :_mos, '?'); end
rewrite_bound(k, t) click to toggle source

rewriting the parsed tree

# File lib/fugit/cron.rb, line 764
def rewrite_bound(k, t)

  s = t.string.downcase

  (k == :mon && MONTHS.index(s)) ||
  (k == :dow && WEEKDS.index(s)) ||
  ((k == :dom) && s[0, 1] == 'l' && -1) || # L, l, last
  s.to_i
end
rewrite_cron(t) click to toggle source
# File lib/fugit/cron.rb, line 825
def rewrite_cron(t)

  st = t
    .sublookup(nil) # go to :ccron or :scron

  return nil unless st

  hcron = st
    .subgather(nil) # list min, hou, mon, ...
    .inject({}) { |h, tt|
      h[tt.name] = tt.name == :tz ? rewrite_tz(tt) : rewrite_entry(tt)
      h }
  hcron[:&] = true if t.string.index('&')

  z, tz = hcron[:tz]; return nil if z && ! tz

  hcron
end
rewrite_elt(k, t) click to toggle source
# File lib/fugit/cron.rb, line 782
def rewrite_elt(k, t)

  at, zt, slt, hat, mot = nil; t.subgather(nil).each do |tt|
    case tt.name
    when :slash then slt = tt
    when :hash then hat = tt
    when :mod then mot = tt
    else if at; zt ||= tt; else; at = tt; end
    end
  end

  sl = slt ? slt.string[1..-1].to_i : nil

  ha = hat ? hat.string[1..-1] : nil
  ha = -1 if ha && ha.upcase[0, 1] == 'L'
  ha = ha.to_i if ha

  mo = mot ? rewrite_mod(k, mot) : nil

  a = at ? rewrite_bound(k, at) : nil
  z = zt ? rewrite_bound(k, zt) : nil

  #a, z = z, a if a && z && a > z
    # handled downstream since gh-27

  [ a, z, sl, ha, mo ]
end
rewrite_entry(t) click to toggle source
# File lib/fugit/cron.rb, line 810
def rewrite_entry(t)

  t
    .subgather(:elt)
    .collect { |et| rewrite_elt(t.name, et) }
end
rewrite_mod(k, t) click to toggle source
# File lib/fugit/cron.rb, line 774
def rewrite_mod(k, t)

  mod, plus = t.string
    .split(/[%+]/).reject(&:empty?).collect(&:to_i)

  [ mod, plus || 0 ]
end
rewrite_tz(t) click to toggle source
# File lib/fugit/cron.rb, line 817
def rewrite_tz(t)

  s = t.strim
  z = EtOrbi.get_tzone(s)

  [ s, z ]
end
s(i) click to toggle source

piece parsers bottom to top

# File lib/fugit/cron.rb, line 669
def s(i); rex(nil, i, /[ \t]+/); end
second_cron(i) click to toggle source
# File lib/fugit/cron.rb, line 753
def second_cron(i)
  seq(:scron, i,
    :lsec_, :lmin_, :lhou_, :ldom_, :lmon_, :ldow, :_tz, '?')
end
slash(i) click to toggle source
# File lib/fugit/cron.rb, line 676
def slash(i); rex(:slash, i, /\/\d\d?/); end
sor_dom(i) click to toggle source
# File lib/fugit/cron.rb, line 702
def sor_dom(i); alt(nil, i, :star, :r_dom); end
sor_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 704
def sor_dow(i); alt(nil, i, :star, :r_dow); end
sor_hou(i) click to toggle source
# File lib/fugit/cron.rb, line 701
def sor_hou(i); alt(nil, i, :star, :r_hou); end
sor_mon(i) click to toggle source
# File lib/fugit/cron.rb, line 703
def sor_mon(i); alt(nil, i, :star, :r_mon); end
sor_mos(i) click to toggle source

sor: star or range

# File lib/fugit/cron.rb, line 700
def sor_mos(i); alt(nil, i, :star, :r_mos); end
sorws_dom(i) click to toggle source
# File lib/fugit/cron.rb, line 709
def sorws_dom(i); seq(nil, i, :sor_dom, :slash, '?'); end
sorws_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 711
def sorws_dow(i); seq(nil, i, :sor_dow, :slash, '?'); end
sorws_hou(i) click to toggle source
# File lib/fugit/cron.rb, line 708
def sorws_hou(i); seq(nil, i, :sor_hou, :slash, '?'); end
sorws_mon(i) click to toggle source
# File lib/fugit/cron.rb, line 710
def sorws_mon(i); seq(nil, i, :sor_mon, :slash, '?'); end
sorws_mos(i) click to toggle source

sorws: star or range with slash

# File lib/fugit/cron.rb, line 707
def sorws_mos(i); seq(nil, i, :sor_mos, :slash, '?'); end
star(i) click to toggle source
# File lib/fugit/cron.rb, line 670
def star(i); str(nil, i, '*'); end