class SayWhen::CronValue

Attributes

expression[RW]
max[RW]
min[RW]
part[RW]
values[RW]

Public Class Methods

new(p, min, max, exp) click to toggle source
# File lib/say_when/cron_expression.rb, line 124
def initialize(p, min, max, exp)
  self.part = p
  self.min = min
  self.max = max
  self.values = []
  self.expression = exp
  parse(exp)
end
parse_number(min, max, val) click to toggle source

works for secs, mins, hours

# File lib/say_when/cron_expression.rb, line 146
def self.parse_number(min, max, val)
  values = []
  case val
    #check for a '/' for increments
    when /(.+)\/(\d+)/
      (( $1 == "*") ? min : $1.to_i).step(max, $2.to_i) { |x| values << x }

    #check for ',' for list of values
    when /(\d+)(,\d+)+/
      values = val.split(',').map{ |v| v.to_i }.sort

    #check for '-' for range of values
    when /(\d+)-(\d+)/
      values = (($1.to_i)..($2.to_i)).to_a

    #check for '*' for all values between min and max
    when /^(\*)$/
      values = (min..max).to_a

    #lastly, should just be a number
    when /^(\d+)$/
      values << $1.to_i

    #if nothing else, leave values as []
    else values = []
  end
  values
end

Public Instance Methods

include?(date) click to toggle source
# File lib/say_when/cron_expression.rb, line 141
def include?(date)
  values.include?(date.send(part))
end
parse(exp) click to toggle source
# File lib/say_when/cron_expression.rb, line 133
def parse(exp)
  self.values = CronValue.parse_number(min, max, exp.upcase)
end
to_s() click to toggle source
# File lib/say_when/cron_expression.rb, line 137
def to_s
  "[e:#{expression}, v:#{values.inspect}]\n"
end