class SetBuilder::Modifiers::DateModifier

Public Class Methods

operators() click to toggle source
# File lib/set_builder/modifiers/date_modifier.rb, line 10
def self.operators
  {
    :ever => [],
    :before => [:date],
    :after => [:date],
    :on => [:date],
    :during_month => [:month],
    :during_year => [:year],
    :in_the_last => [:number, :period],
    :between => [:date, :date]
  }
end

Public Instance Methods

build_conditions_for(selector) click to toggle source
# File lib/set_builder/modifiers/date_modifier.rb, line 25
def build_conditions_for(selector)
  case operator
  when :ever
    "#{selector} IS NOT NULL"
  when :before
    "#{selector}<'#{format_value(get_date)}'"
  when :after
    "#{selector}>'#{format_value(get_date)}'"
  when :on
    "#{selector}='#{format_value(get_date)}'"
  when :during_month
    "extract(month from #{selector})=#{values[0].to_i}"
  when :during_year
    year = values[0].to_i
    return "TRUE" if year <= 0
    "#{selector} BETWEEN '#{year}-01-01' AND '#{year}-12-31'"
  when :in_the_last
    "#{selector}>='#{format_value(get_date)}'"
  when :between
    "#{selector} BETWEEN '#{format_value(Date.parse values[0])}' AND '#{format_value(Date.parse values[1])}'"
  end
end

Protected Instance Methods

format_value(date) click to toggle source
# File lib/set_builder/modifiers/date_modifier.rb, line 74
def format_value(date)
  date = [Date.new(1,1,1), date].max # constrain dates to A.D.
  date.strftime('%Y-%m-%d')
end
get_date() click to toggle source
# File lib/set_builder/modifiers/date_modifier.rb, line 54
def get_date
  case operator
  when :in_the_last
    case values[1]
    when "years", "year"
      values[0].to_i.years.ago
    when "months", "month"
      values[0].to_i.months.ago
    when "weeks", "week"
      values[0].to_i.weeks.ago
    when "days", "day"
      values[0].to_i.days.ago
    end
  else
    Date.parse values[0]
  end
end