projects
/
selectricity-live
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge from Justin
[selectricity-live]
/
lib
/
rubyvote
/
election.rb
diff --git
a/lib/rubyvote/election.rb
b/lib/rubyvote/election.rb
old mode 100755
(executable)
new mode 100644
(file)
index
fc61840
..
ffd31c8
--- a/
lib/rubyvote/election.rb
+++ b/
lib/rubyvote/election.rb
@@
-42,7
+42,11
@@
class ElectionVote
if votes
if votes.instance_of?( Array )
votes.each do |vote|
if votes
if votes.instance_of?( Array )
votes.each do |vote|
- self.tally_vote(vote) if self.verify_vote(vote)
+ if self.verify_vote(vote)
+ self.tally_vote(vote)
+ else
+ raise InvalidVoteError.new ("Invalid vote object", vote)
+ end
end
else
raise ElectionError, "Votes must be in the form of an array.", caller
end
else
raise ElectionError, "Votes must be in the form of an array.", caller
@@
-61,6
+65,11
@@
class ElectionVote
def tally_vote
self.verify_vote(vote)
end
def tally_vote
self.verify_vote(vote)
end
+
+ def filter_out(winner)
+ @candidates.delete_if {|x| winner.winners.include?(x)}
+ end
+
end
class PluralityVote < ElectionVote
end
class PluralityVote < ElectionVote
@@
-124,14
+133,15
@@
class ElectionResult
end
def winner?
end
def winner?
- @winners.length > 0
+ @winners.length > 0
and not @winners[0].nil?
end
end
class PluralityResult < ElectionResult
attr_reader :ranked_candidates
end
end
class PluralityResult < ElectionResult
attr_reader :ranked_candidates
-
+ attr_reader :points
+
def initialize(voteobj=nil)
super(voteobj)
def initialize(voteobj=nil)
super(voteobj)
@@
-142,6
+152,8
@@
class PluralityResult < ElectionResult
b[1] <=> a[1]
end.collect {|a| a[0]}
b[1] <=> a[1]
end.collect {|a| a[0]}
+ @points = @election.votes
+
# winners are anyone who has the same number of votes as the
# first person
@winners = @ranked_candidates.find_all do |i|
# winners are anyone who has the same number of votes as the
# first person
@winners = @ranked_candidates.find_all do |i|
@@
-158,3
+170,10
@@
end
class ElectionError < ArgumentError
end
class ElectionError < ArgumentError
end
+class InvalidVoteError < ElectionError
+ attr_accessor :voteobj
+ def initialize(msg=nil, voteobj=nil)
+ super(msg)
+ @voteobj=voteobj
+ end
+end
Benjamin Mako Hill
||
Want to submit a patch?