Module: ThumbsUp::Karma::InstanceMethods

Defined in:
lib/has_karma.rb

Instance Method Summary collapse

Instance Method Details

#karma(options = {}) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/has_karma.rb', line 31

def karma(options = {})
  self.class.base_class.karmic_objects.collect do |object, attr|
    v = object.where(["#{self.class.base_class.table_name}.#{self.class.base_class.primary_key} = ?", self.id])
    v = v.joins("INNER JOIN #{Vote.table_name} ON #{Vote.table_name}.voteable_type = '#{object.to_s}' AND #{Vote.table_name}.voteable_id = #{object.table_name}.#{object.primary_key}")
    v = v.joins("INNER JOIN #{self.class.base_class.table_name} ON #{self.class.base_class.table_name}.#{self.class.base_class.primary_key} = #{object.table_name}.#{attr[0]}")
    upvotes = v.where(["#{Vote.table_name}.vote = ?", true])
    downvotes = v.where(["#{Vote.table_name}.vote = ?", false])
    if attr[1].length == 1 # Only count upvotes, not downvotes.
      (upvotes.count.to_f * attr[1].first).round
    else
      (upvotes.count.to_f * attr[1].first - downvotes.count.to_f * attr[1].last).round
    end
  end.sum
end