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