def initialize(line)
fail ArgumentError.new(
"not a string: #{line.inspect}"
) unless line.is_a?(String)
@original = line
@original_timezone = nil
items = line.split
if @timezone = ZoTime.get_tzone(items.last)
@original_timezone = items.pop
else
@timezone = ZoTime.get_tzone(:current)
end
fail ArgumentError.new(
"not a valid cronline : '#{line}'"
) unless items.length == 5 or items.length == 6
offset = items.length - 5
@seconds = offset == 1 ? parse_item(items[0], 0, 59) : [ 0 ]
@minutes = parse_item(items[0 + offset], 0, 59)
@hours = parse_item(items[1 + offset], 0, 24)
@days = parse_item(items[2 + offset], -30, 31)
@months = parse_item(items[3 + offset], 1, 12)
@weekdays, @monthdays = parse_weekdays(items[4 + offset])
[ @seconds, @minutes, @hours, @months ].each do |es|
fail ArgumentError.new(
"invalid cronline: '#{line}'"
) if es && es.find { |e| ! e.is_a?(Integer) }
end
if @days && @days.include?(0)
fail ArgumentError.new('invalid day 0 in cronline')
end
end