Refactored quickvotes result calculator from the controller to the model. TODO: Run...
authorJohn Dong <jdong@mit.edu>
Tue, 14 Aug 2007 20:06:57 +0000 (16:06 -0400)
committerJohn Dong <jdong@mit.edu>
Tue, 14 Aug 2007 20:06:57 +0000 (16:06 -0400)
TODO
app/controllers/quickvote_controller.rb
app/models/quick_vote.rb
app/views/quickvote/results.rhtml

diff --git a/TODO b/TODO
index 3728cabb4519a467fdfad11b843fabbdf7610a7b..246b67370573cba31d68912ad5d8d28ab097d971 100644 (file)
--- 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)
 
index f5ab58128caa2d0a8ae03a67fa9994ab0119a2ed..acbf012ff5cb3df503371f59f4b8d71c466e567f 100644 (file)
@@ -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
 
index eb4e63c421f32a4381a5ae1645730c2f9f912772..6259784bfbaf1bc847ad8e67b6fad04a2722cf45 100644 (file)
@@ -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
index 0c5336799bcf8546e945fe5bf01b60f64f2f16f6..1fad7ea36a907186d565ff633e7877b0fe1613b6 100644 (file)
@@ -28,7 +28,7 @@
 
 <div class="mainresultbox">
 <h3>Schulze Method Results</h3>
-<%= render :partial => 'result', :object => @ssd_result %>
+<%= render :partial => 'result', :object => @election.ssd_result %>
 
 <div class="rbmoreinfo"
 <h4>About the Schulze Method</h4>
@@ -47,7 +47,7 @@ Beatpath Winner, Path Voting, and Path Winner.</p>
 
 <div class="resultbox">
 <h3>Plurality Results</h3>
-<%= render :partial => 'result', :object => @plurality_result %>
+<%= render :partial => 'result', :object => @election.plurality_result %>
 
 <div class="rbmoreinfo"
 <h4>About Plurality Voting</h4>
@@ -67,7 +67,7 @@ voting.</p>
 <div class="resultbox">
 <h3>Approval Result</h3>
 <p><font size="-1">(This algorithm assumes that top two choices are "approved.")</font></p>
-<%= render :partial => 'result', :object => @approval_result %>
+<%= render :partial => 'result', :object => @election.approval_result %>
 
 <div class="rbmoreinfo"
 <h4>About Approval Voting</h4>
@@ -85,7 +85,7 @@ accept or not.</p>
 
 <div class="resultbox">
 <h3>Simple Condorcet Results</h3>
-<%= render :partial => 'result', :object => @condorcet_result %>
+<%= render :partial => 'result', :object => @election.condorcet_result %>
 
 <div class="rbmoreinfo"
 <h4>About Simple Cordorcet Voting</h4>
@@ -105,7 +105,7 @@ another Condorcet system.</p>
 
 <div class="resultbox">
 <h3>Borda Count Results</h3>
-<%= render :partial => 'result', :object => @borda_result %>
+<%= render :partial => 'result', :object => @election.borda_result %>
 
 <div class="rbmoreinfo"
 <h4>About Borda Count</h4>

Benjamin Mako Hill || Want to submit a patch?