class Totalizer::Metric

Attributes

date[RW]
duration[RW]
filter[RW]
ids[RW]
map[RW]
model[RW]
value[RW]

Public Class Methods

new(params) click to toggle source
# File lib/totalizer/metric.rb, line 5
def initialize params
  self.model = params[:model]
  self.date = params[:date] || DateTime.now.change(hour: 0)
  self.duration = params[:duration] || 7
  self.filter = params[:filter]
  self.map = params[:map] || 'id'
  validate_attributes!
end

Public Instance Methods

attributes() click to toggle source
# File lib/totalizer/metric.rb, line 14
def attributes
  { model: model, date: date, duration: duration, filter: filter, map: map }
end
end_date() click to toggle source
# File lib/totalizer/metric.rb, line 18
def end_date
  date
end
finish() click to toggle source
# File lib/totalizer/metric.rb, line 46
def finish
  finish_ids.size
end
finish_ids() click to toggle source
# File lib/totalizer/metric.rb, line 42
def finish_ids
  @finish_ids ||= calculate(["created_at < ?", end_date])
end
rate() click to toggle source
# File lib/totalizer/metric.rb, line 50
def rate
  start == 0 ? 0 : (finish - start).to_f / start.to_f
end
start() click to toggle source
# File lib/totalizer/metric.rb, line 38
def start
  start_ids.size
end
start_date() click to toggle source
# File lib/totalizer/metric.rb, line 22
def start_date
  date - duration.days
end
start_ids() click to toggle source
# File lib/totalizer/metric.rb, line 34
def start_ids
  @start_ids ||= calculate(["created_at < ?", start_date])
end

Private Instance Methods

calculate(where) click to toggle source
# File lib/totalizer/metric.rb, line 56
def calculate where
  model.where(filter).where(where).map{ |object| object.send(map) }.uniq
end
validate_attributes!() click to toggle source
# File lib/totalizer/metric.rb, line 60
def validate_attributes!
  raise Errors::InvalidModel if model.nil?
  raise Errors::InvalidDate unless date.kind_of?(DateTime)
  raise Errors::InvalidDuration unless duration.kind_of?(Integer)
end