module Ohm::Tallyable

Public Class Methods

included(model) click to toggle source
# File lib/ohm/tallyable.rb, line 59
def self.included(model)
  model.extend(Macros)
end

Public Instance Methods

after_save() click to toggle source
Calls superclass method
# File lib/ohm/tallyable.rb, line 75
def after_save
  _increment_tallies
  super
end
before_delete() click to toggle source
Calls superclass method
# File lib/ohm/tallyable.rb, line 63
def before_delete
  _decrement_tallies
  super
end
before_update() click to toggle source
Calls superclass method
# File lib/ohm/tallyable.rb, line 69
def before_update
  _decrement_tallies
  super
end

Protected Instance Methods

_decrement_tallies() click to toggle source
# File lib/ohm/tallyable.rb, line 92
def _decrement_tallies
  _update_tallies(-1) { |attribute| db.hget(key, attribute) }
end
_increment_tallies() click to toggle source
# File lib/ohm/tallyable.rb, line 96
def _increment_tallies
  _update_tallies(1) { |attribute| send(attribute) }
end
_update_tallies(amount) { |options| ... } click to toggle source
# File lib/ohm/tallyable.rb, line 100
def _update_tallies(amount, &block)
  return if new?

  self.class.tallies.each do |attribute, options|
    by = options[:by] ? {options[:by] => yield(options[:by])} : nil
    key = self.class._tally_key(attribute, by)

    if (value = yield(attribute))
      key.zincrby(amount, value)
      # need to convert zscore to_i because older versions
      # return a double encoded in a string
      key.zrem(value) if key.zscore(value).to_i == 0
    end
  end
end