module Mongoid::Utils::Votable

Public Instance Methods

vote!(value, voter) click to toggle source
# File lib/mongoid/utils/votable.rb, line 32
def vote!(value, voter)
  vote = self.votes.find_or_create_by(user: voter)

  if vote.value == value
    vote.destroy
    value = 0
  end

  update_values(value, vote)
  vote.update_attribute(:value, value) if value != 0

  vote
end
vote_down(voter) click to toggle source
# File lib/mongoid/utils/votable.rb, line 28
def vote_down(voter)
  vote!(-1, voter)
end
vote_up(voter) click to toggle source
# File lib/mongoid/utils/votable.rb, line 24
def vote_up(voter)
  vote!(1, voter)
end
voted?(voter) click to toggle source
# File lib/mongoid/utils/votable.rb, line 20
def voted?(voter)
  votes.where(voter: voter).first != nil
end
votes_count() click to toggle source
# File lib/mongoid/utils/votable.rb, line 46
def votes_count
  self.votes.count
end

Private Instance Methods

update_values(value, vote) click to toggle source
# File lib/mongoid/utils/votable.rb, line 58
def update_values(value, vote)
  votes_up_change = (vote.value > 0 ? -vote.value : 0) + (value > 0 ? value : 0)
  votes_down_change = (vote.value < 0 ? vote.value : 0) + (value < 0 ? value.abs : 0)

  self.timeless.inc(votes_up: votes_up_change)
  self.timeless.inc(votes_down: votes_down_change)
  self.timeless.inc(votes_value: votes_up_change - votes_down_change)
end