Module: MongoidTraffic::Log::ClassMethods
- Defined in:
- lib/mongoid_traffic/log.rb
Overview
Instance Method Summary collapse
- #aggregate_on(att) ⇒ Object
- #find_field_by_name(field_name) ⇒ Object
- #log(*args) ⇒ Object
- #sum(att) ⇒ Object
- #sum_hash(field_name) ⇒ Object
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.[: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 |