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 808
def _dom(i); seq(nil, i, :hyphen, :dom); end
_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 810
def _dow(i); seq(nil, i, :hyphen, :dow); end
_hou(i) click to toggle source
# File lib/fugit/cron.rb, line 807
def _hou(i); seq(nil, i, :hyphen, :hou); end
_mon(i) click to toggle source
# File lib/fugit/cron.rb, line 809
def _mon(i); seq(nil, i, :hyphen, :mon); end
_mos(i) click to toggle source
# File lib/fugit/cron.rb, line 806
def _mos(i); seq(nil, i, :hyphen, :mos); end
_tz(i) click to toggle source
# File lib/fugit/cron.rb, line 874
def _tz(i); alt(:tz, i, :_tz_delta, :_tz_name); end
_tz_delta(i) click to toggle source
# File lib/fugit/cron.rb, line 871
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 868
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 794
def and?(i); rex(nil, i, /&?/); end
classic_cron(i) click to toggle source
# File lib/fugit/cron.rb, line 876
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 792
def comma(i); rex(nil, i, /,([ \t]*,)*/); end
comma?(i) click to toggle source
# File lib/fugit/cron.rb, line 793
def comma?(i); rex(nil, i, /([ \t]*,)*/); end
cron(i) click to toggle source
# File lib/fugit/cron.rb, line 885
def cron(i)
  alt(:cron, i, :second_cron, :classic_cron)
end
dom(i) click to toggle source
# File lib/fugit/cron.rb, line 800
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 843
def dom_elt(i); alt(:elt, i, :slash, :sorws_dom); end
dow(i) click to toggle source
# File lib/fugit/cron.rb, line 802
def dow(i); rex(:dow, i, DOW_REX); end
dow_elt(i) click to toggle source
# File lib/fugit/cron.rb, line 845
def dow_elt(i); alt(:elt, i, :slash, :sorws_dow); end
dow_elt_(i) click to toggle source
# File lib/fugit/cron.rb, line 852
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 804
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 850
def h_dow(i); seq(:elt, i, :dow, :dow_hash); end
hou(i) click to toggle source
# File lib/fugit/cron.rb, line 799
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 842
def hou_elt(i); alt(:elt, i, :slash, :sorws_hou); end
hyphen(i) click to toggle source
# File lib/fugit/cron.rb, line 790
def hyphen(i); str(:hyphen, i, '-'); end
ldom_(i) click to toggle source
# File lib/fugit/cron.rb, line 864
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 866
def ldow(i); seq(nil, i, :comma?, :list_dow, :comma?, :and?); end
lhou_(i) click to toggle source
# File lib/fugit/cron.rb, line 863
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 857
def list_dom(i); jseq(:dom, i, :dom_elt, :comma); end
list_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 859
def list_dow(i); jseq(:dow, i, :dow_elt_, :comma); end
list_hou(i) click to toggle source
# File lib/fugit/cron.rb, line 856
def list_hou(i); jseq(:hou, i, :hou_elt, :comma); end
list_min(i) click to toggle source
# File lib/fugit/cron.rb, line 855
def list_min(i); jseq(:min, i, :mos_elt, :comma); end
list_mon(i) click to toggle source
# File lib/fugit/cron.rb, line 858
def list_mon(i); jseq(:mon, i, :mon_elt, :comma); end
list_sec(i) click to toggle source
# File lib/fugit/cron.rb, line 854
def list_sec(i); jseq(:sec, i, :mos_elt, :comma); end
lmin_(i) click to toggle source
# File lib/fugit/cron.rb, line 862
def lmin_(i); seq(nil, i, :comma?, :list_min, :comma?, :s); end
lmon_(i) click to toggle source
# File lib/fugit/cron.rb, line 865
def lmon_(i); seq(nil, i, :comma?, :list_mon, :comma?, :s); end
lsec_(i) click to toggle source
# File lib/fugit/cron.rb, line 861
def lsec_(i); seq(nil, i, :comma?, :list_sec, :comma?, :s); end
mod(i) click to toggle source
# File lib/fugit/cron.rb, line 847
def mod(i); rex(:mod, i, /%\d+(\+\d+)?/); end
mod_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 849
def mod_dow(i); seq(:elt, i, :dow, :mod); end
mon(i) click to toggle source
# File lib/fugit/cron.rb, line 801
def mon(i); rex(:mon, i, MONTH_REX); end
mon_elt(i) click to toggle source
# File lib/fugit/cron.rb, line 844
def mon_elt(i); alt(:elt, i, :slash, :sorws_mon); end
mos(i) click to toggle source
# File lib/fugit/cron.rb, line 798
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 841
def mos_elt(i); alt(:elt, i, :slash, :sorws_mos); end
r_dom(i) click to toggle source
# File lib/fugit/cron.rb, line 815
def r_dom(i); seq(nil, i, :dom, :_dom, '?'); end
r_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 817
def r_dow(i); seq(nil, i, :dow, :_dow, '?'); end
r_hou(i) click to toggle source
# File lib/fugit/cron.rb, line 814
def r_hou(i); seq(nil, i, :hou, :_hou, '?'); end
r_mon(i) click to toggle source
# File lib/fugit/cron.rb, line 816
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 813
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 891
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 957
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 909
def rewrite_elt(k, t)

  at, zt, spt, 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
    when :hyphen then spt = tt
    when :tilde then spt = tt
    else if spt; 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
  sp = spt ? spt.name : nil

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

  [ a, z, sp, sl, ha, mo ]
end
rewrite_entry(t) click to toggle source
# File lib/fugit/cron.rb, line 942
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 901
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 949
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 788
def s(i); rex(nil, i, /[ \t]+/); end
second_cron(i) click to toggle source
# File lib/fugit/cron.rb, line 880
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 796
def slash(i); rex(:slash, i, /\/\d\d?/); end
sor_dom(i) click to toggle source
# File lib/fugit/cron.rb, line 829
def sor_dom(i); alt(nil, i, :star, :t_dom, :r_dom); end
sor_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 831
def sor_dow(i); alt(nil, i, :star, :t_dow, :r_dow); end
sor_hou(i) click to toggle source
# File lib/fugit/cron.rb, line 828
def sor_hou(i); alt(nil, i, :star, :t_hou, :r_hou); end
sor_mon(i) click to toggle source
# File lib/fugit/cron.rb, line 830
def sor_mon(i); alt(nil, i, :star, :t_mon, :r_mon); end
sor_mos(i) click to toggle source

sor: star or range

# File lib/fugit/cron.rb, line 827
def sor_mos(i); alt(nil, i, :star, :t_mos, :r_mos); end
sorws_dom(i) click to toggle source
# File lib/fugit/cron.rb, line 836
def sorws_dom(i); seq(nil, i, :sor_dom, :slash, '?'); end
sorws_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 838
def sorws_dow(i); seq(nil, i, :sor_dow, :slash, '?'); end
sorws_hou(i) click to toggle source
# File lib/fugit/cron.rb, line 835
def sorws_hou(i); seq(nil, i, :sor_hou, :slash, '?'); end
sorws_mon(i) click to toggle source
# File lib/fugit/cron.rb, line 837
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 834
def sorws_mos(i); seq(nil, i, :sor_mos, :slash, '?'); end
star(i) click to toggle source
# File lib/fugit/cron.rb, line 789
def star(i); str(nil, i, '*'); end
t_dom(i) click to toggle source
# File lib/fugit/cron.rb, line 822
def t_dom(i); seq(nil, i, :dom, '?', :tilde, :dom, '?'); end
t_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 824
def t_dow(i); seq(nil, i, :dow, '?', :tilde, :dow, '?'); end
t_hou(i) click to toggle source
# File lib/fugit/cron.rb, line 821
def t_hou(i); seq(nil, i, :hou, '?', :tilde, :hou, '?'); end
t_mon(i) click to toggle source
# File lib/fugit/cron.rb, line 823
def t_mon(i); seq(nil, i, :mon, '?', :tilde, :mon, '?'); end
t_mos(i) click to toggle source

t: tilde range

# File lib/fugit/cron.rb, line 820
def t_mos(i); seq(nil, i, :mos, '?', :tilde, :mos, '?'); end
tilde(i) click to toggle source
# File lib/fugit/cron.rb, line 791
def tilde(i); str(:tilde, i, '~'); end