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 657
def _dom(i); seq(nil, i, :hyphen, :dom); end
_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 659
def _dow(i); seq(nil, i, :hyphen, :dow); end
_hou(i) click to toggle source
# File lib/fugit/cron.rb, line 656
def _hou(i); seq(nil, i, :hyphen, :hou); end
_mon(i) click to toggle source
# File lib/fugit/cron.rb, line 658
def _mon(i); seq(nil, i, :hyphen, :mon); end
_mos(i) click to toggle source
# File lib/fugit/cron.rb, line 655
def _mos(i); seq(nil, i, :hyphen, :mos); end
_tz(i) click to toggle source
# File lib/fugit/cron.rb, line 716
def _tz(i); alt(:tz, i, :_tz_delta, :_tz_name); end
_tz_delta(i) click to toggle source
# File lib/fugit/cron.rb, line 713
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 710
def _tz_name(i)
  rex(nil, i, / +[A-Z][a-zA-Z0-9+\-]+(\/[A-Z][a-zA-Z0-9+\-_]+){0,2}/)
end
classic_cron(i) click to toggle source
# File lib/fugit/cron.rb, line 718
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 643
def comma(i); str(nil, i, ','); end
cron(i) click to toggle source
# File lib/fugit/cron.rb, line 725
def cron(i)
  alt(:cron, i, :second_cron, :classic_cron)
end
dom(i) click to toggle source
# File lib/fugit/cron.rb, line 649
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 685
def dom_elt(i); alt(:elt, i, :slash, :sorws_dom); end
dow(i) click to toggle source
# File lib/fugit/cron.rb, line 651
def dow(i); rex(:dow, i, DOW_REX); end
dow_elt(i) click to toggle source
# File lib/fugit/cron.rb, line 687
def dow_elt(i); alt(:elt, i, :slash, :sorws_dow); end
dow_elt_(i) click to toggle source
# File lib/fugit/cron.rb, line 694
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 653
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 692
def h_dow(i); seq(:elt, i, :dow, :dow_hash); end
hou(i) click to toggle source
# File lib/fugit/cron.rb, line 648
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 684
def hou_elt(i); alt(:elt, i, :slash, :sorws_hou); end
hyphen(i) click to toggle source
# File lib/fugit/cron.rb, line 642
def hyphen(i); str(nil, i, '-'); end
ldom_(i) click to toggle source
# File lib/fugit/cron.rb, line 706
def ldom_(i); seq(nil, i, :list_dom, :s); end
ldow(i)
Alias for: list_dow
lhou_(i) click to toggle source
# File lib/fugit/cron.rb, line 705
def lhou_(i); seq(nil, i, :list_hou, :s); end
list_dom(i) click to toggle source
# File lib/fugit/cron.rb, line 699
def list_dom(i); jseq(:dom, i, :dom_elt, :comma); end
list_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 701
def list_dow(i); jseq(:dow, i, :dow_elt_, :comma); end
Also aliased as: ldow
list_hou(i) click to toggle source
# File lib/fugit/cron.rb, line 698
def list_hou(i); jseq(:hou, i, :hou_elt, :comma); end
list_min(i) click to toggle source
# File lib/fugit/cron.rb, line 697
def list_min(i); jseq(:min, i, :mos_elt, :comma); end
list_mon(i) click to toggle source
# File lib/fugit/cron.rb, line 700
def list_mon(i); jseq(:mon, i, :mon_elt, :comma); end
list_sec(i) click to toggle source
# File lib/fugit/cron.rb, line 696
def list_sec(i); jseq(:sec, i, :mos_elt, :comma); end
lmin_(i) click to toggle source
# File lib/fugit/cron.rb, line 704
def lmin_(i); seq(nil, i, :list_min, :s); end
lmon_(i) click to toggle source
# File lib/fugit/cron.rb, line 707
def lmon_(i); seq(nil, i, :list_mon, :s); end
lsec_(i) click to toggle source
# File lib/fugit/cron.rb, line 703
def lsec_(i); seq(nil, i, :list_sec, :s); end
mod(i) click to toggle source
# File lib/fugit/cron.rb, line 689
def mod(i); rex(:mod, i, /%\d+(\+\d+)?/); end
mod_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 691
def mod_dow(i); seq(:elt, i, :dow, :mod); end
mon(i) click to toggle source
# File lib/fugit/cron.rb, line 650
def mon(i); rex(:mon, i, MONTH_REX); end
mon_elt(i) click to toggle source
# File lib/fugit/cron.rb, line 686
def mon_elt(i); alt(:elt, i, :slash, :sorws_mon); end
mos(i) click to toggle source
# File lib/fugit/cron.rb, line 647
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 683
def mos_elt(i); alt(:elt, i, :slash, :sorws_mos); end
r_dom(i) click to toggle source
# File lib/fugit/cron.rb, line 664
def r_dom(i); seq(nil, i, :dom, :_dom, '?'); end
r_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 666
def r_dow(i); seq(nil, i, :dow, :_dow, '?'); end
r_hou(i) click to toggle source
# File lib/fugit/cron.rb, line 663
def r_hou(i); seq(nil, i, :hou, :_hou, '?'); end
r_mon(i) click to toggle source
# File lib/fugit/cron.rb, line 665
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 662
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 731
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 792
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 }

  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 749
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 777
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 741
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 784
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 640
def s(i); rex(nil, i, /[ \t]+/); end
second_cron(i) click to toggle source
# File lib/fugit/cron.rb, line 721
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 645
def slash(i); rex(:slash, i, /\/\d\d?/); end
sor_dom(i) click to toggle source
# File lib/fugit/cron.rb, line 671
def sor_dom(i); alt(nil, i, :star, :r_dom); end
sor_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 673
def sor_dow(i); alt(nil, i, :star, :r_dow); end
sor_hou(i) click to toggle source
# File lib/fugit/cron.rb, line 670
def sor_hou(i); alt(nil, i, :star, :r_hou); end
sor_mon(i) click to toggle source
# File lib/fugit/cron.rb, line 672
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 669
def sor_mos(i); alt(nil, i, :star, :r_mos); end
sorws_dom(i) click to toggle source
# File lib/fugit/cron.rb, line 678
def sorws_dom(i); seq(nil, i, :sor_dom, :slash, '?'); end
sorws_dow(i) click to toggle source
# File lib/fugit/cron.rb, line 680
def sorws_dow(i); seq(nil, i, :sor_dow, :slash, '?'); end
sorws_hou(i) click to toggle source
# File lib/fugit/cron.rb, line 677
def sorws_hou(i); seq(nil, i, :sor_hou, :slash, '?'); end
sorws_mon(i) click to toggle source
# File lib/fugit/cron.rb, line 679
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 676
def sorws_mos(i); seq(nil, i, :sor_mos, :slash, '?'); end
star(i) click to toggle source
# File lib/fugit/cron.rb, line 641
def star(i); str(nil, i, '*'); end