From 46f924b34b305d2474b09ce204a7a9187e8d8622 Mon Sep 17 00:00:00 2001 From: John Dong Date: Tue, 14 Aug 2007 16:06:57 -0400 Subject: [PATCH] Refactored quickvotes result calculator from the controller to the model. TODO: Run testcases to make sure it still works --- TODO | 2 +- app/controllers/quickvote_controller.rb | 29 ++------------------- app/models/quick_vote.rb | 34 +++++++++++++++++++++++++ app/views/quickvote/results.rhtml | 10 ++++---- 4 files changed, 42 insertions(+), 33 deletions(-) diff --git a/TODO b/TODO index 3728cab..246b673 100644 --- a/TODO +++ b/TODO @@ -1,5 +1,5 @@ Known bugs or issues: * make sure that quickvotes names are not integers - +* Run testcases against QuickVotes results (after refactor work) diff --git a/app/controllers/quickvote_controller.rb b/app/controllers/quickvote_controller.rb index f5ab581..acbf012 100644 --- a/app/controllers/quickvote_controller.rb +++ b/app/controllers/quickvote_controller.rb @@ -143,33 +143,8 @@ class QuickvoteController < ApplicationController def results @election = ident_to_quickvote(params[:ident]) - - # initalize the tallies to empty arrays - preference_tally = Array.new - plurality_tally = Array.new - approval_tally = Array.new - - @election.voters.each do |voter| - # skip if the voter has not voted or has an unconfirmed vote - next unless voter.voted? - - plurality_tally << voter.vote.rankings.sort[0].candidate.id - approval_tally << voter.vote.rankings.sort[0..1].collect \ - { |ranking| ranking.candidate.id } - preference_tally << voter.vote.rankings.sort.collect \ - { |ranking| ranking.candidate.id } - end - - @plurality_result = PluralityVote.new(plurality_tally).result - @approval_result = ApprovalVote.new(approval_tally).result - @condorcet_result = PureCondorcetVote.new(preference_tally).result - @ssd_result = CloneproofSSDVote.new(preference_tally).result - @borda_result = BordaVote.new(preference_tally).result - #@runoff_result = InstantRunoffVote.new(preference_tally).result - #@runoff_results = PluralityVote.new(preference_tally).result - - - @candidates = {} + @election.results + @candidates = {} @election.candidates.each {|c| @candidates[c.id] = c} end diff --git a/app/models/quick_vote.rb b/app/models/quick_vote.rb index eb4e63c..6259784 100644 --- a/app/models/quick_vote.rb +++ b/app/models/quick_vote.rb @@ -3,6 +3,11 @@ class QuickVote < Election validates_uniqueness_of :name attr_accessor :raw_candidates attr_accessor :reviewed + attr_accessor :plurality_result + attr_accessor :approval_result + attr_accessor :condorcet_result + attr_accessor :ssd_result + attr_accessor :borda_result def validate if @raw_candidates.length < 2 @@ -40,4 +45,33 @@ class QuickVote < Election self.candidates << candidate end end + + #Calculate Election Results + def results + # initalize the tallies to empty arrays + preference_tally = Array.new + plurality_tally = Array.new + approval_tally = Array.new + + self.voters.each do |voter| + # skip if the voter has not voted or has an unconfirmed vote + next unless voter.voted? + + plurality_tally << voter.vote.rankings.sort[0].candidate.id + approval_tally << voter.vote.rankings.sort[0..1].collect \ + { |ranking| ranking.candidate.id } + preference_tally << voter.vote.rankings.sort.collect \ + { |ranking| ranking.candidate.id } + end + + @plurality_result = PluralityVote.new(plurality_tally).result + @approval_result = ApprovalVote.new(approval_tally).result + @condorcet_result = PureCondorcetVote.new(preference_tally).result + @ssd_result = CloneproofSSDVote.new(preference_tally).result + @borda_result = BordaVote.new(preference_tally).result + #@runoff_result = InstantRunoffVote.new(preference_tally).result + #@runoff_results = PluralityVote.new(preference_tally).result + + + end end diff --git a/app/views/quickvote/results.rhtml b/app/views/quickvote/results.rhtml index 0c53367..1fad7ea 100644 --- a/app/views/quickvote/results.rhtml +++ b/app/views/quickvote/results.rhtml @@ -28,7 +28,7 @@

Schulze Method Results

-<%= render :partial => 'result', :object => @ssd_result %> +<%= render :partial => 'result', :object => @election.ssd_result %>
About the Schulze Method @@ -47,7 +47,7 @@ Beatpath Winner, Path Voting, and Path Winner.

Plurality Results

-<%= render :partial => 'result', :object => @plurality_result %> +<%= render :partial => 'result', :object => @election.plurality_result %>
About Plurality Voting @@ -67,7 +67,7 @@ voting.

Approval Result

(This algorithm assumes that top two choices are "approved.")

-<%= render :partial => 'result', :object => @approval_result %> +<%= render :partial => 'result', :object => @election.approval_result %>
About Approval Voting @@ -85,7 +85,7 @@ accept or not.

Simple Condorcet Results

-<%= render :partial => 'result', :object => @condorcet_result %> +<%= render :partial => 'result', :object => @election.condorcet_result %>
About Simple Cordorcet Voting @@ -105,7 +105,7 @@ another Condorcet system.

Borda Count Results

-<%= render :partial => 'result', :object => @borda_result %> +<%= render :partial => 'result', :object => @election.borda_result %>
About Borda Count -- 2.30.2