class Continuity::CronEntry
Public Class Methods
new(entry)
click to toggle source
# File lib/continuity/cron_entry.rb, line 4 def initialize(entry) @entry = entry cron_parts = @entry.split(" ") if cron_parts.size == 5 cron_parts.unshift("0") elsif cron_parts.size != 6 raise CronFormatError, "Cron entry is invalid: #{@entry}" end seconds, minutes, hours, dates, months, dayofweek = *cron_parts @seconds_bits = get_bits(seconds, (0..60)) @minutes_bits = get_bits(minutes, (0..60)) @hours_bits = get_bits(hours, (0..60)) @doms_bits = get_bits(dates, (1..31)) @months_bits = get_bits(months, (1..12)) @dows_bits = get_bits(dayofweek,(0..7)) end
Public Instance Methods
at?(time)
click to toggle source
# File lib/continuity/cron_entry.rb, line 24 def at?(time) tst(@seconds_bits, time.sec) && tst(@minutes_bits, time.min) && tst(@hours_bits , time.hour) && tst(@doms_bits , time.mday) && tst(@months_bits , time.month) && tst(@dows_bits , time.wday) end
Private Instance Methods
cast_and_validate_integer(i, valid_range)
click to toggle source
# File lib/continuity/cron_entry.rb, line 79 def cast_and_validate_integer(i, valid_range) if i.match(/\d+/) i = i.to_i if valid_range.include?(i) return i end end raise CronFormatError, "Cron entry is invalid: #{@entry} (#{i} outside of #{valid_range}" end
get_bits(s, valid_range)
click to toggle source
# File lib/continuity/cron_entry.rb, line 35 def get_bits(s, valid_range) bits = 0 s.split(",").each do |r| interval, range = parse_range_and_interval(r, valid_range) range.step(interval) do |n| bits |= 1 << n end end bits end
parse_range_and_interval(s, valid_range)
click to toggle source
# File lib/continuity/cron_entry.rb, line 49 def parse_range_and_interval(s, valid_range) # extract interval (if exists) if s.include?("/") s, interval = s.split("/") interval = cast_and_validate_integer(interval, valid_range) else interval = 1 end # determine trigger range if s == "*" trigger_range = valid_range elsif s.include?("-") low, high = s.split("-") low = cast_and_validate_integer(low, valid_range) high = cast_and_validate_integer(high, valid_range) trigger_range = (low..high) else s = cast_and_validate_integer(s, valid_range) trigger_range = (s..s) end return interval, trigger_range end
tst(bits, n)
click to toggle source
# File lib/continuity/cron_entry.rb, line 75 def tst(bits, n) (bits & (1 << n)) > 0 end