class Rufus::Scheduler::CronLine
def parse_range(item, min, max)
def parse_range(item, min, max) return %w[ L ] if item == 'L' item = '*' + item if item[0, 1] == '/' m = item.match(RANGE_REGEX) fail ArgumentError.new( "cannot parse #{item.inspect}" ) unless m mmin = min == -30 ? 1 : min # days sta = m[1] sta = sta == '*' ? mmin : sta.to_i edn = m[2] edn = edn ? edn.to_i : sta edn = max if m[1] == '*' inc = m[3] inc = inc ? inc.to_i : 1 fail ArgumentError.new( "#{item.inspect} positive/negative ranges not allowed" ) if (sta < 0 && edn > 0) || (sta > 0 && edn < 0) fail ArgumentError.new( "#{item.inspect} descending day ranges not allowed" ) if min == -30 && sta > edn fail ArgumentError.new( "#{item.inspect} is not in range #{min}..#{max}" ) if sta < min || edn > max fail ArgumentError.new( "#{item.inspect} increment must be greater than zero" ) if inc == 0 r = [] val = sta loop do v = val v = 0 if max == 24 && v == 24 # hours r << v break if inc == 1 && val == edn val += inc break if inc > 1 && val > edn val = min if val > max end r.uniq end