X-Git-Url: https://projects.mako.cc/source/rubyvote/blobdiff_plain/e68b817c4ef0e16cc4c9b0b4dbc5b7feb7d2a112..c9649b477b0e94c4f7f36e6d42225e0d6a113f57:/lib/rubyvote/positional.rb diff --git a/lib/rubyvote/positional.rb b/lib/rubyvote/positional.rb index 3de3fb2..d72f8a7 100644 --- a/lib/rubyvote/positional.rb +++ b/lib/rubyvote/positional.rb @@ -29,6 +29,19 @@ ## These classes inherit from and/or are modeled after the classes in ## election.rb and condorcet.rb +# Borda is a positional voting system and, as a result, takes a list of +# ranked candidates and assigns points to each candidates based on their +# order. In Borda, there are *n* candidate and the first candidates is +# assigned *n* - 1 points and each subsequent candidate is assigned one +# less point. The candidate is assigned no points. +# +# Currently, all candidates should be ranked in each ballot. +# +# Example:: +# +# require 'positional' +# vote_array = [ ["A", "B"], ["B", "A"], ["B", "A"] ] +# resultobject = BordaVote.new(vote_array).result class BordaVote < ElectionVote def initialize(votes=nil) @@ -38,7 +51,7 @@ class BordaVote < ElectionVote end super(votes) end - + def tally_vote(vote) points = candidates.length - 1 vote.each do |candidate| @@ -51,7 +64,7 @@ class BordaVote < ElectionVote points -= 1 end end - + def verify_vote(vote=nil) vote.instance_of?( Array ) and vote == vote.uniq @@ -64,11 +77,12 @@ end class BordaResult < ElectionResult attr_reader :ranked_candidates + attr_reader :points def initialize(voteobj=nil) super(voteobj) votes = @election.votes - + @ranked_candidates = votes.sort do |a, b| b[1] <=> a[1] end.collect {|i| i[0]} @@ -76,6 +90,8 @@ class BordaResult < ElectionResult @winners = @ranked_candidates.find_all do |i| votes[i] == votes[@ranked_candidates[0]] end + + @points = @election.votes end end