class Lookout::PeriodCollection
def self.load_default
def self.load_default instance = new { realtime: { label: "Realtime", range: -> { [1.minute.ago] }, }, day: { label: "Day", range: -> { [Time.current.beginning_of_day, Time.current] }, }, '7d': { label: "7 Days", range: -> { [7.days.ago, Time.current] }, }, '30d': { label: "30 Days", range: -> { [30.days.ago, Time.current] }, }, mtd: { label: "Month-to-date", range: -> { [Time.current.beginning_of_month, Time.current] }, }, lastmonth: { label: "Last month", range: -> { [1.month.ago.beginning_of_month, 1.month.ago.end_of_month] }, }, ytd: { label: "This year", range: -> { [Time.current.beginning_of_year, Time.current] }, }, '12mo': { label: "12 months", range: -> { [12.months.ago.to_datetime, Time.current] }, }, all: { label: "All-time", range: -> { [Date.new(2004, 8, 1).to_datetime, Time.current] }, }, }.each do |param, options| instance.add(param, options[:label], options[:range]) end instance.default = :'30d' instance end
def add(param, label, range_proc)
def add(param, label, range_proc) raise ArgumentError, "range must be a proc, or respond to .call" unless range_proc.respond_to?(:call) raise ArgumentError, "range.call must return a range or an array" unless range_proc.call.is_a?(Range) || range_proc.call.is_a?(Array) @periods[param.to_sym] = Period.new(param: param, label: label, range: range_proc) end
def all
def all @periods end
def default=(val)
def default=(val) @default = val.to_sym end
def delete(param)
def delete(param) @periods.delete(param.to_sym) end
def each(&block)
def each(&block) @periods.each(&block) end
def find(value)
def find(value) @periods[value.try(:to_sym)] end
def for(value)
def for(value) if value.nil? period = @periods[@default] else period = (@periods[value.to_sym] || @periods[@default]) end if period period.range.call else nil end end
def initialize
def initialize @periods = {} @default = nil @max = nil end
def max=(amount)
def max=(amount) @max = amount end
def reset
def reset @periods = {} @default = nil end