def parse_weekdays(item)
return nil if item == '*'
weekdays = nil
monthdays = nil
item.downcase.split(',').each do |it|
WEEKDAYS.each_with_index { |a, i| it.gsub!(/#{a}/, i.to_s) }
it = it.gsub(/([^#])l/, '\1#-1')
if m = it.match(/\A(.+)#(l|-?[12345])\z/)
fail ArgumentError.new(
"ranges are not supported for monthdays (#{it})"
) if m[1].index('-')
it = it.gsub(/#l/, '#-1')
(monthdays ||= []) << it
else
fail ArgumentError.new(
"invalid weekday expression (#{item})"
) if it !~ /\A0*[0-7](-0*[0-7])?\z/
its = it.index('-') ? parse_range(it, 0, 7) : [ Integer(it) ]
its = its.collect { |i| i == 7 ? 0 : i }
(weekdays ||= []).concat(its)
end
end
weekdays = weekdays.uniq.sort if weekdays
[ weekdays, monthdays ]
end