class Evaluator
Constants
- EVAL_ORDER
- REPEAT_SPANS
Public Class Methods
new(rule_list)
click to toggle source
# File lib/eternal.rb, line 94 def initialize(rule_list) @rule_list = rule_list @schedule = IceCube::Schedule.new @rules = [] @options = [] end
Public Instance Methods
at_date(time)
click to toggle source
# File lib/eternal.rb, line 174 def at_date(time) new_time = time old_time = @schedule.start_time yr = new_time.year mon = new_time.mon day = new_time.day hr = old_time.hour min = old_time.min sec = old_time.sec @schedule.start_time = Time.new(yr, mon, day, hr, min, sec) end
at_time(time)
click to toggle source
# File lib/eternal.rb, line 163 def at_time(time) new_time = time old_time = @schedule.start_time yr = new_time.year mon = new_time.mon day = new_time.day hr = new_time.hour min = new_time.min sec = new_time.sec @schedule.start_time = Time.new(yr, mon, day, hr, min, sec) end
duration(time)
click to toggle source
# File lib/eternal.rb, line 221 def duration(time) @schedule.duration = time end
end_date(string)
click to toggle source
# File lib/eternal.rb, line 208 def end_date(string) now = @schedule.start_time || Time.now new_time = Chronic.parse(string, :now => :now, :guess => :begin) old_time = @schedule.start_time yr = new_time.year mon = new_time.mon day = new_time.day hr = old_time.hour min = old_time.min sec = old_time.sec @schedule.end_time = Time.new(yr, mon, day, hr, min, sec) end
end_time(string)
click to toggle source
# File lib/eternal.rb, line 195 def end_time(string) now = @schedule.start_time || Time.now new_time = Chronic.parse(string, :now => :now, :guess => :begin) old_time = @schedule.start_time yr = new_time.year mon = new_time.mon day = new_time.day hr = new_time.hour min = new_time.min sec = new_time.sec @schedule.end_time = Time.new(yr, mon, day, hr, min, sec) end
evaluate()
click to toggle source
# File lib/eternal.rb, line 101 def evaluate p @rule_list @rule_list.each do |rule| operation = rule.shift p operation case operation when :every amount = rule[0] duration = rule[1] @options << {every: {duration: REPEAT_SPANS[duration.to_sym], amount: amount}} when :at time = Chronic.parse(rule.reduce(:concat)) @options << {at_time: time} when :on if rule.all? {|x| (x =~ /#{DAYS_REGEX}|and/i) != nil} rule.select! {|x| (x =~ /#{DAYS_REGEX}/i) != nil} rule.map!(&:to_sym) @options << {on: rule} else days = Chronic.parse(rule.reduce(:concat)) @options << {at_date: days} end when :start time = rule.reduce(:concat) if ChronicDuration.parse(time) < 24 * 60 * 60 @options << {at_time: Chronic.parse(time, :guess => :begin)} else @options << {at_date: Chronic.parse(time, :guess => :begin)} end when :endtime time = rule.reduce(:concat) @options << {end_time: time} when :end time = rule.reduce(:concat) @options << {end_date: time} when :duration time = rule.reduce(:concat) @options << {duration: ChronicDuration.parse(time)} #when :until end end p @options option = @options.reduce(:merge) sorted = option.sort_by { |a|EVAL_ORDER.index(a) } sorted.each {|opt| operation = opt[0]; args = opt[1]; self.send(operation, args) } @rules.each {|rule| @schedule.add_recurrence_rule(rule) } @schedule end
every(opts)
click to toggle source
# File lib/eternal.rb, line 150 def every(opts) p opts @rules << IceCube::Rule.send(opts[:duration], opts[:amount]) end
except(time)
click to toggle source
# File lib/eternal.rb, line 225 def except(time) end
in(span)
click to toggle source
# File lib/eternal.rb, line 191 def in(span) @rules.last.month_of_year(span) if MONTHS.values.include? span end
on(day)
click to toggle source
# File lib/eternal.rb, line 155 def on(day) if(@rules.last) @rules.last.day(day) else at_date(Chronic.parse(day.last.to_s)) end end
until(string)
click to toggle source
needs to be deferred till existence of rule
# File lib/eternal.rb, line 187 def until(string) @rules.last.until(Chronic.parse(string, :guess => :begin)) end