Sha256: dbcf07eb3ef71b0b12cb2ebd6604536382f3260f876ae176497e8f4f34b972f7
Contents?: true
Size: 1.96 KB
Versions: 3
Compression:
Stored size: 1.96 KB
Contents
require 'set_builder/modifier/adverb' module SetBuilder module Modifiers class DateModifier < Modifier::Adverb 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 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 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 def format_value(date) date = [Date.new(1,1,1), date].max # constrain dates to A.D. date.strftime('%Y-%m-%d') end end end end
Version data entries
3 entries across 3 versions & 1 rubygems