Sha256: a04591fd5d8779fbd7e0b03b562f6bb2b6882a0cc5749f7a0465b35b07d8f4fb
Contents?: true
Size: 1.69 KB
Versions: 2
Compression:
Stored size: 1.69 KB
Contents
module ForestLiana class OperatorDateIntervalParser PERIODS = { yesterday: { duration: 1, period: 'day' }, lastWeek: { duration: 1, period: 'week' }, last2Weeks: { duration: 2, period: 'week' }, lastMonth: { duration: 1, period: 'month' }, last3Months: { duration: 3, period: 'month' }, lastYear: { duration: 1, period: 'year' } } PERIODS_LAST_X_DAYS = /^last(\d+)days$/ def initialize(value) @value = value end def is_interval_date_value return true if PERIODS[@value.to_sym] match = PERIODS_LAST_X_DAYS.match(@value) return true if match && match[1] false end def get_interval_date_filter return nil unless is_interval_date_value() match = PERIODS_LAST_X_DAYS.match(@value) return ">= #{Integer(match[1]).day.ago}" if match && match[1] duration = PERIODS[@value.to_sym][:duration] period = PERIODS[@value.to_sym][:period] from = duration.send(period).ago.send("beginning_of_#{period}") to = 1.send(period).ago.send("end_of_#{period}") "BETWEEN '#{from}' AND '#{to}'" end def get_interval_date_filter_for_previous_interval return nil unless is_interval_date_value() match = PERIODS_LAST_X_DAYS.match(@value) if match && match[1] return "BETWEEN #{Integer(match[1] * 2).day.ago}" + " AND #{Integer(match[1]).day.ago}" end duration = PERIODS[@value.to_sym][:duration] period = PERIODS[@value.to_sym][:period] from = (duration * 2).send(period).ago.send("beginning_of_#{period}") to = (1 + duration).send(period).ago.send("end_of_#{period}") "BETWEEN '#{from}' AND '#{to}'" end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
forest_liana-1.3.15 | app/services/forest_liana/operator_date_interval_parser.rb |
forest_liana-1.3.14 | app/services/forest_liana/operator_date_interval_parser.rb |