BigW Consortium Gitlab
Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gitlab-ce
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Forest Godfrey
gitlab-ce
Commits
505a492c
Commit
505a492c
authored
Nov 05, 2014
by
Michael Clarke
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Only count the user's last vote
parent
465f4167
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
129 additions
and
37 deletions
+129
-37
CHANGELOG
CHANGELOG
+1
-1
typography.scss
app/assets/stylesheets/generic/typography.scss
+5
-0
issuable.rb
app/models/concerns/issuable.rb
+14
-2
note.rb
app/models/note.rb
+17
-0
_note.html.haml
app/views/projects/notes/_note.html.haml
+18
-8
votes_spec.rb
spec/lib/votes_spec.rb
+74
-26
No files found.
CHANGELOG
View file @
505a492c
...
...
@@ -14,7 +14,7 @@ v 7.8.0
-
-
-
-
-
Only count a user's vote once on a merge request or issue (Michael Clarke)
-
-
-
...
...
app/assets/stylesheets/generic/typography.scss
View file @
505a492c
...
...
@@ -128,3 +128,7 @@ a:focus {
textarea
.js-gfm-input
{
font-family
:
$monospace_font
;
}
.strikethrough
{
text-decoration
:
line-through
;
}
\ No newline at end of file
app/models/concerns/issuable.rb
View file @
505a492c
...
...
@@ -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
app/models/note.rb
View file @
505a492c
...
...
@@ -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
...
...
app/views/projects/notes/_note.html.haml
View file @
505a492c
...
...
@@ -28,14 +28,24 @@
%span
.note-last-update
=
note_timestamp
(
note
)
-
if
note
.
upvote?
%span
.vote.upvote.label.label-success
%i
.fa.fa-thumbs-up
\+1
-
if
note
.
downvote?
%span
.vote.downvote.label.label-danger
%i
.fa.fa-thumbs-down
\-1
-
if
note
.
superceded?
(
@notes
)
-
if
note
.
upvote?
%span
.vote.upvote.label.label-gray.strikethrough
%i
.fa.fa-thumbs-up
\+1
-
if
note
.
downvote?
%span
.vote.downvote.label.label-gray.strikethrough
%i
.fa.fa-thumbs-down
\-1
-
else
-
if
note
.
upvote?
%span
.vote.upvote.label.label-success
%i
.fa.fa-thumbs-up
\+1
-
if
note
.
downvote?
%span
.vote.downvote.label.label-danger
%i
.fa.fa-thumbs-down
\-1
.note-body
...
...
spec/lib/votes_spec.rb
View file @
505a492c
...
...
@@ -20,11 +20,17 @@ describe Issue, 'Votes' do
issue
.
upvotes
.
should
==
1
end
it
"should recognize multiple +1 notes"
do
add_note
"+1 This is awesome"
add_note
"+1 I want this"
it
'should recognize multiple +1 notes'
do
add_note
'+1 This is awesome'
,
create
(
:user
)
add_note
'+1 I want this'
,
create
(
:user
)
issue
.
upvotes
.
should
==
2
end
it
'should not count 2 +1 votes from the same user'
do
add_note
'+1 This is awesome'
add_note
'+1 I want this'
issue
.
upvotes
.
should
==
1
end
end
describe
"#downvotes"
do
...
...
@@ -45,8 +51,8 @@ describe Issue, 'Votes' do
end
it
"should recognize multiple -1 notes"
do
add_note
"-1 This is bad"
add_note
"-1 Away with this"
add_note
(
'-1 This is bad'
,
create
(
:user
))
add_note
(
'-1 Away with this'
,
create
(
:user
))
issue
.
downvotes
.
should
==
2
end
end
...
...
@@ -73,11 +79,17 @@ describe Issue, 'Votes' do
end
it
"should recognize multiple notes"
do
add_note
"+1 This is awesome"
add_note
"-1 This is bad"
add_note
"+1 I want this"
add_note
(
'+1 This is awesome'
,
create
(
:user
))
add_note
(
'-1 This is bad'
,
create
(
:user
))
add_note
(
'+1 I want this'
,
create
(
:user
))
issue
.
votes_count
.
should
==
3
end
it
'should not count 2 -1 votes from the same user'
do
add_note
'-1 This is suspicious'
add_note
'-1 This is bad'
issue
.
votes_count
.
should
==
1
end
end
describe
"#upvotes_in_percent"
do
...
...
@@ -90,17 +102,17 @@ describe Issue, 'Votes' do
issue
.
upvotes_in_percent
.
should
==
100
end
it
"should count multiple +1 notes as 100%"
do
add_note
"+1 This is awesome"
add_note
"+1 I want this"
it
'should count multiple +1 notes as 100%'
do
add_note
(
'+1 This is awesome'
,
create
(
:user
))
add_note
(
'+1 I want this'
,
create
(
:user
))
issue
.
upvotes_in_percent
.
should
==
100
end
it
"should count fractions for multiple +1 and -1 notes correctly"
do
add_note
"+1 This is awesome"
add_note
"+1 I want this"
add_note
"-1 This is bad"
add_note
"+1 me too"
it
'should count fractions for multiple +1 and -1 notes correctly'
do
add_note
(
'+1 This is awesome'
,
create
(
:user
))
add_note
(
'+1 I want this'
,
create
(
:user
))
add_note
(
'-1 This is bad'
,
create
(
:user
))
add_note
(
'+1 me too'
,
create
(
:user
))
issue
.
upvotes_in_percent
.
should
==
75
end
end
...
...
@@ -115,22 +127,58 @@ describe Issue, 'Votes' do
issue
.
downvotes_in_percent
.
should
==
100
end
it
"should count multiple -1 notes as 100%"
do
add_note
"-1 This is bad"
add_note
"-1 Away with this"
it
'should count multiple -1 notes as 100%'
do
add_note
(
'-1 This is bad'
,
create
(
:user
))
add_note
(
'-1 Away with this'
,
create
(
:user
))
issue
.
downvotes_in_percent
.
should
==
100
end
it
"should count fractions for multiple +1 and -1 notes correctly"
do
add_note
"+1 This is awesome"
add_note
"+1 I want this"
add_note
"-1 This is bad"
add_note
"+1 me too"
it
'should count fractions for multiple +1 and -1 notes correctly'
do
add_note
(
'+1 This is awesome'
,
create
(
:user
))
add_note
(
'+1 I want this'
,
create
(
:user
))
add_note
(
'-1 This is bad'
,
create
(
:user
))
add_note
(
'+1 me too'
,
create
(
:user
))
issue
.
downvotes_in_percent
.
should
==
25
end
end
def
add_note
(
text
)
issue
.
notes
<<
create
(
:note
,
note:
text
,
project:
issue
.
project
)
describe
'#filter_superceded_votes'
do
it
'should count a users vote only once amongst multiple votes'
do
add_note
(
'-1 This needs work before I will accept it'
)
add_note
(
'+1 I want this'
,
create
(
:user
))
add_note
(
'+1 This is is awesome'
,
create
(
:user
))
add_note
(
'+1 this looks good now'
)
add_note
(
'+1 This is awesome'
,
create
(
:user
))
add_note
(
'+1 me too'
,
create
(
:user
))
issue
.
downvotes
.
should
==
0
issue
.
upvotes
.
should
==
5
end
it
'should count each users vote only once'
do
add_note
'-1 This needs work before it will be accepted'
add_note
'+1 I like this'
add_note
'+1 I still like this'
add_note
'+1 I really like this'
add_note
'+1 Give me this now!!!!'
p
issue
.
downvotes
.
should
==
0
p
issue
.
upvotes
.
should
==
1
end
it
'should count a users vote only once without caring about comments'
do
add_note
'-1 This needs work before it will be accepted'
add_note
'Comment 1'
add_note
'Another comment'
add_note
'+1 vote'
add_note
'final comment'
p
issue
.
downvotes
.
should
==
0
p
issue
.
upvotes
.
should
==
1
end
end
def
add_note
(
text
,
author
=
issue
.
author
)
issue
.
notes
<<
create
(
:note
,
note:
text
,
project:
issue
.
project
,
author_id:
author
.
id
)
end
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment