diff --git a/lib/fugit/cron.rb b/lib/fugit/cron.rb index 049806e..85f6e96 100644 --- a/lib/fugit/cron.rb +++ b/lib/fugit/cron.rb @@ -660,7 +660,8 @@ module Parser include Raabro def s(i); rex(nil, i, /[ \t]+/); end def star(i); str(nil, i, '*'); end def hyphen(i); str(nil, i, '-'); end - def comma(i); str(nil, i, ','); end + def comma(i); rex(nil, i, /,([ \t]*,)*/); end + def comma?(i); rex(nil, i, /([ \t]*,)*/); end def slash(i); rex(:slash, i, /\/\d\d?/); end @@ -720,12 +721,12 @@ def list_dom(i); jseq(:dom, i, :dom_elt, :comma); end def list_mon(i); jseq(:mon, i, :mon_elt, :comma); end def list_dow(i); jseq(:dow, i, :dow_elt_, :comma); end - def lsec_(i); seq(nil, i, :list_sec, :s); end - def lmin_(i); seq(nil, i, :list_min, :s); end - def lhou_(i); seq(nil, i, :list_hou, :s); end - def ldom_(i); seq(nil, i, :list_dom, :s); end - def lmon_(i); seq(nil, i, :list_mon, :s); end - alias ldow list_dow + def lsec_(i); seq(nil, i, :comma, '?', :list_sec, :comma, '?', :s); end + def lmin_(i); seq(nil, i, :comma, '?', :list_min, :comma, '?', :s); end + def lhou_(i); seq(nil, i, :comma, '?', :list_hou, :comma, '?', :s); end + def ldom_(i); seq(nil, i, :comma, '?', :list_dom, :comma, '?', :s); end + def lmon_(i); seq(nil, i, :comma, '?', :list_mon, :comma, '?', :s); end + def ldow(i); seq(nil, i, :comma, '?', :list_dow, :comma, '?'); end def _tz_name(i) rex(nil, i, / +[A-Z][a-zA-Z0-9+\-]+(\/[A-Z][a-zA-Z0-9+\-_]+){0,2}/) diff --git a/spec/cron_spec.rb b/spec/cron_spec.rb index f871767..53492d5 100644 --- a/spec/cron_spec.rb +++ b/spec/cron_spec.rb @@ -1158,6 +1158,12 @@ class Fugit::Cron::TimeCursor # # some cronds are different, see https://crontab.guru/#7_0/1_*_*_* + [ '9,,19 * * * *', '9,19 * * * *' ], + [ ',8 * * * *', '8 * * * *' ], + [ ',,10,,20, * * * *', '10,20 * * * *' ], + [ '10,,20 * 1,,11,,21, * *', '10,20 * 1,11,21 * *' ], + [ ',,10,,22, * * * * Asia/Omsk', '10,22 * * * * Asia/Omsk' ], + ].each { |c, e| it "parses #{c}" do