Module: MongoidTraffic::Log::ClassMethods

Defined in:
lib/mongoid_traffic/log.rb

Overview

Instance Method Summary collapse

Instance Method Details

#aggregate_on(att) ⇒ Object



55
56
57
58
59
60
# File 'lib/mongoid_traffic/log.rb', line 55

def aggregate_on(att)
  case find_field_by_name(att).type.to_s
  when 'Integer' then sum(att)
  when 'Hash' then sum_hash(att)
  end
end

#find_field_by_name(field_name) ⇒ Object



70
71
72
73
# File 'lib/mongoid_traffic/log.rb', line 70

def find_field_by_name(field_name)
  return unless f = fields.detect { |k, v| k == field_name.to_s || v.options[:as].to_s == field_name.to_s }
  f.last
end

#log(*args) ⇒ Object



51
52
53
# File 'lib/mongoid_traffic/log.rb', line 51

def log(*args)
  MongoidTraffic::Logger.log(self, *args)
end

#sum(att) ⇒ Object



62
63
64
65
66
67
68
# File 'lib/mongoid_traffic/log.rb', line 62

def sum(att)
  if att.to_sym == :unique_ids
    aggregate_on(:unique_ids).keys.count
  else
    super(att)
  end
end

#sum_hash(field_name) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/mongoid_traffic/log.rb', line 75

def sum_hash(field_name)
  pluck(field_name).inject({}) do |res, h|
    merger = proc do |_key, v1, v2|
      case
      when Hash === v1 && Hash === v2 then v1.merge(v2, &merger)
      when Hash === v2 then v2
      else v1.to_i + v2.to_i
      end
    end
    res = res.merge(h, &merger)
  end
end