Class Runt::REYear
In: lib/runt/temporalexpression.rb
Parent: Object

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

Methods

include?   new   save   to_s  

Included Modules

TExpr

Constants

NO_DAY = 0   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

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)

[Source]

# File lib/runt/temporalexpression.rb, line 487
  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

[Source]

# File lib/runt/temporalexpression.rb, line 515
  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

[Source]

# File lib/runt/temporalexpression.rb, line 525
  def save
    "Runt::REYear.new(#{@start_month}, #{@start_day}, #{@end_month}, #{@end_day})"
  end

[Source]

# File lib/runt/temporalexpression.rb, line 529
  def to_s
    "#{Runt.month_name(@start_month)} #{Runt.ordinalize(@start_day)} " +
      "through #{Runt.month_name(@end_month)} #{Runt.ordinalize(@end_day)}"
  end

[Validate]