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 818
def _dom(i); seq(nil, i, :hyphen, :dom); end
_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 820
def _dow(i); seq(nil, i, :hyphen, :dow); end
_hou(i) click to toggle source
# File lib/fugit/cron.rb, line 817
def _hou(i); seq(nil, i, :hyphen, :hou); end
_mon(i) click to toggle source
# File lib/fugit/cron.rb, line 819
def _mon(i); seq(nil, i, :hyphen, :mon); end
_mos(i) click to toggle source
# File lib/fugit/cron.rb, line 816
def _mos(i); seq(nil, i, :hyphen, :mos); end
_tz(i) click to toggle source
# File lib/fugit/cron.rb, line 884
def _tz(i); alt(:tz, i, :_tz_delta, :_tz_name); end
_tz_delta(i) click to toggle source
# File lib/fugit/cron.rb, line 881
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 878
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 804
def and?(i); rex(nil, i, /&?/); end
classic_cron(i) click to toggle source
# File lib/fugit/cron.rb, line 886
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 802
def comma(i); rex(nil, i, /,([ \t]*,)*/); end
comma?(i) click to toggle source
# File lib/fugit/cron.rb, line 803
def comma?(i); rex(nil, i, /([ \t]*,)*/); end
cron(i) click to toggle source
# File lib/fugit/cron.rb, line 895
def cron(i)
  alt(:cron, i, :second_cron, :classic_cron)
end
dom(i) click to toggle source
# File lib/fugit/cron.rb, line 810
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 853
def dom_elt(i); alt(:elt, i, :slash, :sorws_dom); end
dow(i) click to toggle source
# File lib/fugit/cron.rb, line 812
def dow(i); rex(:dow, i, DOW_REX); end
dow_elt(i) click to toggle source
# File lib/fugit/cron.rb, line 855
def dow_elt(i); alt(:elt, i, :slash, :sorws_dow); end
dow_elt_(i) click to toggle source
# File lib/fugit/cron.rb, line 862
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 814
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 860
def h_dow(i); seq(:elt, i, :dow, :dow_hash); end
hou(i) click to toggle source
# File lib/fugit/cron.rb, line 809
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 852
def hou_elt(i); alt(:elt, i, :slash, :sorws_hou); end
hyphen(i) click to toggle source
# File lib/fugit/cron.rb, line 800
def hyphen(i); str(:hyphen, i, '-'); end
ldom_(i) click to toggle source
# File lib/fugit/cron.rb, line 874
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 876
def ldow(i); seq(nil, i, :comma?, :list_dow, :comma?, :and?); end
lhou_(i) click to toggle source
# File lib/fugit/cron.rb, line 873
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 867
def list_dom(i); jseq(:dom, i, :dom_elt, :comma); end
list_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 869
def list_dow(i); jseq(:dow, i, :dow_elt_, :comma); end
list_hou(i) click to toggle source
# File lib/fugit/cron.rb, line 866
def list_hou(i); jseq(:hou, i, :hou_elt, :comma); end
list_min(i) click to toggle source
# File lib/fugit/cron.rb, line 865
def list_min(i); jseq(:min, i, :mos_elt, :comma); end
list_mon(i) click to toggle source
# File lib/fugit/cron.rb, line 868
def list_mon(i); jseq(:mon, i, :mon_elt, :comma); end
list_sec(i) click to toggle source
# File lib/fugit/cron.rb, line 864
def list_sec(i); jseq(:sec, i, :mos_elt, :comma); end
lmin_(i) click to toggle source
# File lib/fugit/cron.rb, line 872
def lmin_(i); seq(nil, i, :comma?, :list_min, :comma?, :s); end
lmon_(i) click to toggle source
# File lib/fugit/cron.rb, line 875
def lmon_(i); seq(nil, i, :comma?, :list_mon, :comma?, :s); end
lsec_(i) click to toggle source
# File lib/fugit/cron.rb, line 871
def lsec_(i); seq(nil, i, :comma?, :list_sec, :comma?, :s); end
mod(i) click to toggle source
# File lib/fugit/cron.rb, line 857
def mod(i); rex(:mod, i, /%\d+(\+\d+)?/); end
mod_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 859
def mod_dow(i); seq(:elt, i, :dow, :mod); end
mon(i) click to toggle source
# File lib/fugit/cron.rb, line 811
def mon(i); rex(:mon, i, MONTH_REX); end
mon_elt(i) click to toggle source
# File lib/fugit/cron.rb, line 854
def mon_elt(i); alt(:elt, i, :slash, :sorws_mon); end
mos(i) click to toggle source
# File lib/fugit/cron.rb, line 808
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 851
def mos_elt(i); alt(:elt, i, :slash, :sorws_mos); end
r_dom(i) click to toggle source
# File lib/fugit/cron.rb, line 825
def r_dom(i); seq(nil, i, :dom, :_dom, '?'); end
r_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 827
def r_dow(i); seq(nil, i, :dow, :_dow, '?'); end
r_hou(i) click to toggle source
# File lib/fugit/cron.rb, line 824
def r_hou(i); seq(nil, i, :hou, :_hou, '?'); end
r_mon(i) click to toggle source
# File lib/fugit/cron.rb, line 826
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 823
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 901
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 967
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 919
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 952
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 911
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 959
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 798
def s(i); rex(nil, i, /[ \t]+/); end
second_cron(i) click to toggle source
# File lib/fugit/cron.rb, line 890
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 806
def slash(i); rex(:slash, i, /\/\d\d?/); end
sor_dom(i) click to toggle source
# File lib/fugit/cron.rb, line 839
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 841
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 838
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 840
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 837
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 846
def sorws_dom(i); seq(nil, i, :sor_dom, :slash, '?'); end
sorws_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 848
def sorws_dow(i); seq(nil, i, :sor_dow, :slash, '?'); end
sorws_hou(i) click to toggle source
# File lib/fugit/cron.rb, line 845
def sorws_hou(i); seq(nil, i, :sor_hou, :slash, '?'); end
sorws_mon(i) click to toggle source
# File lib/fugit/cron.rb, line 847
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 844
def sorws_mos(i); seq(nil, i, :sor_mos, :slash, '?'); end
star(i) click to toggle source
# File lib/fugit/cron.rb, line 799
def star(i); str(nil, i, '*'); end
t_dom(i) click to toggle source
# File lib/fugit/cron.rb, line 832
def t_dom(i); seq(nil, i, :dom, '?', :tilde, :dom, '?'); end
t_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 834
def t_dow(i); seq(nil, i, :dow, '?', :tilde, :dow, '?'); end
t_hou(i) click to toggle source
# File lib/fugit/cron.rb, line 831
def t_hou(i); seq(nil, i, :hou, '?', :tilde, :hou, '?'); end
t_mon(i) click to toggle source
# File lib/fugit/cron.rb, line 833
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 830
def t_mos(i); seq(nil, i, :mos, '?', :tilde, :mos, '?'); end
tilde(i) click to toggle source
# File lib/fugit/cron.rb, line 801
def tilde(i); str(:tilde, i, '~'); end