Sha256: 71bfd393733a49524512a791a34faf4e53ad8c8b203b46ce2a26bbd0c8f99d57

Contents?: true

Size: 1.54 KB

Versions: 12

Compression:

Stored size: 1.54 KB

Contents

class Agilibox::SmallData::FilterStrategyByDateOrDatetimePeriod < ::Agilibox::SmallData::FilterStrategyByKeyValue
  def initialize(*)
    if instance_of?(Agilibox::SmallData::FilterStrategyByDateOrDatetimePeriod)
      raise "please use FilterStrategyByDatePeriod or FilterStrategyByDatetimePeriod"
    end

    super
  end

  def apply(query, value) # rubocop:disable Metrics/MethodLength
    value = value.to_s

    if value == "today"
      a = now
      b = now
    elsif value == "yesterday"
      a = (now - 1.day)
      b = (now - 1.day)
    elsif value == "this_week"
      a = now.beginning_of_week
      b = now.end_of_week
    elsif value == "this_month"
      a = now.beginning_of_month
      b = now.end_of_month
    elsif value == "this_year"
      a = now.beginning_of_year
      b = now.end_of_year
    elsif value == "last_week"
      a = (now - 1.week).beginning_of_week
      b = (now - 1.week).end_of_week
    elsif value == "last_month"
      a = (now - 1.month).beginning_of_month
      b = (now - 1.month).end_of_month
    elsif value == "last_year"
      a = (now - 1.year).beginning_of_year
      b = (now - 1.year).end_of_year
    elsif (m = value.match(/last\.([0-9]+)\.(days?|weeks?|months?|years?)/))
      a = now - m[1].to_i.public_send(m[2])
      b = now
    else
      return query
    end

    if now.is_a?(Time)
      a = a.beginning_of_day if a
      b = b.end_of_day       if b
    end

    column = column_for(query)

    query = query.where("#{column} >= ?", a) if a
    query = query.where("#{column} <= ?", b) if b

    query
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
agilibox-2.0.0 app/filters/agilibox/small_data/filter_strategy_by_date_or_datetime_period.rb
agilibox-1.11.0 app/filters/agilibox/small_data/filter_strategy_by_date_or_datetime_period.rb
agilibox-1.10.5 app/filters/agilibox/small_data/filter_strategy_by_date_or_datetime_period.rb
agilibox-1.10.2 app/filters/agilibox/small_data/filter_strategy_by_date_or_datetime_period.rb
agilibox-1.10.1 app/filters/agilibox/small_data/filter_strategy_by_date_or_datetime_period.rb
agilibox-1.10.0 app/filters/agilibox/small_data/filter_strategy_by_date_or_datetime_period.rb
agilibox-1.9.20 app/filters/agilibox/small_data/filter_strategy_by_date_or_datetime_period.rb
agilibox-1.9.19 app/filters/agilibox/small_data/filter_strategy_by_date_or_datetime_period.rb
agilibox-1.9.18 app/filters/agilibox/small_data/filter_strategy_by_date_or_datetime_period.rb
agilibox-1.9.17 app/filters/agilibox/small_data/filter_strategy_by_date_or_datetime_period.rb
agilibox-1.9.16 app/filters/agilibox/small_data/filter_strategy_by_date_or_datetime_period.rb
agilibox-1.9.15 app/filters/agilibox/small_data/filter_strategy_by_date_or_datetime_period.rb