class Runt::REYear

TExpr that matches date ranges within a single year. Assumes that the start and end parameters occur within the same year.

Constants

NO_DAY

Sentinel value used to denote that no specific day was given to create the expression.

Attributes

end_day[RW]
end_month[RW]
start_day[RW]
start_month[RW]

Public Class Methods

new(start_month, *args) click to toggle source

Synopsis

REYear.new(start_month [, (start_day | end_month), ...]

Args

One or two arguments given
start_month

Start month. Valid values are 1..12. When no other parameters are given this value will be used for the end month as well. Matches the entire month through the ending month.

end_month

End month. Valid values are 1..12. When given in two argument form will match through the entire month.

Three or four arguments given
start_month

Start month. Valid values are 1..12.

start_day

Start day. Valid values are 1..31, depending on the month.

end_month

End month. Valid values are 1..12. If a fourth argument is not given, this value will cover through the entire month.

end_day

End day. Valid values are 1..31, depending on the month.

Description

Create a new REYear expression expressing a range of months or days within months within a year.

Usage

# Creates the range March 12th through May 23rd
expr = REYear.new(3,12,5,23)

# Creates the range March 1st through May 31st
expr = REYear.new(3,5)

# Creates the range March 12th through May 31st
expr = REYear.new(3,12,5)

# Creates the range March 1st through March 30th
expr = REYear.new(3)
# File lib/runt/temporalexpression.rb, line 531
def initialize(start_month, *args)
  @start_month = start_month
  if (args.nil? || args.size == NO_DAY) then
    # One argument given
    @end_month = start_month
    @start_day = NO_DAY
    @end_day = NO_DAY
  else
    case args.size
    when 1
      @end_month = args[0]
      @start_day = NO_DAY
      @end_day = NO_DAY
    when 2
      @start_day = args[0]
      @end_month = args[1]
      @end_day = NO_DAY
    when 3
      @start_day = args[0]
      @end_month = args[1]
      @end_day = args[2]
    else
      raise "Invalid number of var args: 1 or 3 expected, #{args.size} given"
    end
  end
  @same_month_dates_provided = (@start_month == @end_month) && (@start_day!=NO_DAY && @end_day != NO_DAY)
end

Public Instance Methods

==(o) click to toggle source
Calls superclass method
# File lib/runt/temporalexpression.rb, line 559
def ==(o)
  o.is_a?(REYear) ? start_day == o.start_day && end_day == o.end_day && start_month == o.start_month && end_month == o.end_month : super(o)
end
include?(date) click to toggle source
# File lib/runt/temporalexpression.rb, line 563
def include?(date)
 
  return same_start_month_include_day?(date)        && same_end_month_include_day?(date) if @same_month_dates_provided

  is_between_months?(date) ||
    (same_start_month_include_day?(date) ||
      same_end_month_include_day?(date))
end
save() click to toggle source
# File lib/runt/temporalexpression.rb, line 573
def save
  "Runt::REYear.new(#{@start_month}, #{@start_day}, #{@end_month}, #{@end_day})"
end
to_s() click to toggle source
# File lib/runt/temporalexpression.rb, line 577
def to_s
  "#{Runt.month_name(@start_month)} #{Runt.ordinalize(@start_day)} " +
    "through #{Runt.month_name(@end_month)} #{Runt.ordinalize(@end_day)}"
end

Private Instance Methods

is_between_months?(date) click to toggle source
# File lib/runt/temporalexpression.rb, line 583
def is_between_months?(date)
  (date.mon > @start_month) && (date.mon < @end_month)
end
same_end_month_include_day?(date) click to toggle source
# File lib/runt/temporalexpression.rb, line 587
def same_end_month_include_day?(date)
  return false unless (date.mon == @end_month)
  (@end_day == NO_DAY)  || (date.day <= @end_day)
end
same_start_month_include_day?(date) click to toggle source
# File lib/runt/temporalexpression.rb, line 592
def same_start_month_include_day?(date)
  return false unless (date.mon == @start_month)
  (@start_day == NO_DAY) || (date.day >= @start_day)
end