diff options
author | Michael Clarke <michael.m.clarke@gmail.com> | 2014-11-05 20:45:18 +0000 |
---|---|---|
committer | Michael Clarke <michael.m.clarke@gmail.com> | 2015-01-19 21:18:36 +0000 |
commit | 505a492cd87be7683827c5f46a05b6a7dddffc86 (patch) | |
tree | 3d34981fbfb3e429475d2f6e87da0c63db5b9657 /app/models | |
parent | 465f41673a418096b761d12438301c7b217f9a81 (diff) | |
download | gitlab-ce-505a492cd87be7683827c5f46a05b6a7dddffc86.tar.gz |
Only count the user's last vote
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/concerns/issuable.rb | 16 | ||||
-rw-r--r-- | app/models/note.rb | 17 |
2 files changed, 31 insertions, 2 deletions
diff --git a/app/models/concerns/issuable.rb b/app/models/concerns/issuable.rb index f49708fd6eb..b8bee0d0ec0 100644 --- a/app/models/concerns/issuable.rb +++ b/app/models/concerns/issuable.rb @@ -88,7 +88,7 @@ module Issuable # Return the number of -1 comments (downvotes) def downvotes - notes.select(&:downvote?).size + filter_superceded_votes(notes.select(&:downvote?), notes).size end def downvotes_in_percent @@ -101,7 +101,7 @@ module Issuable # Return the number of +1 comments (upvotes) def upvotes - notes.select(&:upvote?).size + filter_superceded_votes(notes.select(&:upvote?), notes).size end def upvotes_in_percent @@ -154,4 +154,16 @@ module Issuable self.labels << label end end + + private + + def filter_superceded_votes(votes, notes) + filteredvotes = [] + votes + votes.each do |vote| + if vote.superceded?(notes) + filteredvotes.delete(vote) + end + end + filteredvotes + end end diff --git a/app/models/note.rb b/app/models/note.rb index e99bc2668d6..1b7e412e9c5 100644 --- a/app/models/note.rb +++ b/app/models/note.rb @@ -459,6 +459,23 @@ class Note < ActiveRecord::Base ) end + def superceded?(notes) + return false unless vote? + notes.each do |note| + next if note == self + if note.vote? && + self[:author_id] == note[:author_id] && + self[:created_at] <= note[:created_at] + return true + end + end + false + end + + def vote? + upvote? || downvote? + end + def votable? for_issue? || (for_merge_request? && !for_diff_line?) end |