class ElectionsController < ApplicationController
model :raw_voter_list, :voter, :vote, :candidate
-
- # general methods for dealing with elections
+ ## general methods for dealing with elections
+ ####################################################################
def index
list
render :action => 'list'
@election_pages, @elections = paginate :elections, :per_page => 10
end
- # methods for displaying, creating, and manipulating election overview
- # data
+ ## methods for displaying, creating,
+ ## and manipulating election overview data
+ ####################################################################
+
def show
@election = Election.find(params[:id])
end
# methods fod display, adding, deleting, and manipulating candidate
# information for elections
+ ####################################################################
def new_candidates
@election = Election.find( params[:id] )
end
@election = Election.find( params[:id] )
end
- # methods for displaying, adding, deleting, and manipulating voters
- # for a particular election
+ ## methods for displaying, adding, deleting, and manipulating voters
+ ## for a particular election
+ ####################################################################
def new_voters
@election = Election.find( params[:id] )
if params.has_key?[:raw_voter_list]
voter.destroy
end
- def summary_results
+ ## methods for computing and printing results
+ ####################################################################
+ def results
+ @election = Election.find( params[:id] )
+ votes = []
+
+ @election.voters.each do |voter|
+ if voter.vote and voter.vote.confirmed?
+ votes << voter.vote.rankings.sort.collect {|vote| vote.candidate_id}
+ end
+ end
+
+ @voteobj = CloneproofSSDVote.new(votes)
+ @resultobj = @voteobj.result
+ @winners = @resultobj.winners
+
+ @candidates_by_id = {}
+ @election.candidates.each {|cand| @candidates_by_id[cand.id] = cand}
end
def detailed_results
- @election = Election.find( params[:id] )
-
+
+ self.results
+ breakpoint
@voter_list = []
@vote_list = []
- @election.voters.each do |voter|
+ @election.voters. each do |voter|
if voter.vote and voter.vote.confirmed?
@voter_list << voter.email
@vote_list << voter.vote
@vote_list.sort!
@vote_list.sort! { |a,b| a.token <=> b.token }
- #breakpoint
-
end
-
+
+ ## private methods
+ ####################################################################
private
- def randomize_order
- end
def process_incoming_voters(raw_voter_list)
incoming_voters = RawVoterList.new( raw_voter_list )
--- /dev/null
+<% %>
+<p>The matrix listing the number of times that any candidate was
+preferred to any other candidates is listed here:</p>
+
+<table border="1">
+<tr>
+<th></th>
+<% for candidate in @election.candidates.sort %>
+ <th><%= candidate.name %></th>
+<% end %>
+</tr>
+<% for cand1 in @election.candidates.sort %>
+ <tr>
+ <th><%= cand1.name %></th>
+ <% for cand2 in @election.candidates.sort %>
+ <td>
+ <% if cand1 == cand2 %>
+ N/A
+ <% next %>
+ <% else %>
+ <%= @voteobj.votes[cand1.id][cand2.id] %>
+ <% end %>
+ </td>
+ <% end %>
+ </tr>
+<% end %>
+</table>
+
<% %>
+<h2>Result</h2>
+
+<%= render_partial 'winner' %>
+
+<h2>Result Details</h2>
+
+<%= render_partial 'winner_details' %>
+
+<h2>Election Rolls for Voter Verification</h2>
+
<p>The voting rolls -- displayed here in alphabetical order -- for the
last election are are follows.</p>
-<h2>Voters</h2>
-<table>
+<p>Information is displayed here to help voters verify that their own
+vote was recorded correctly and that the election was not tampered
+with.</p>
+
+<h3>Voters</h3>
+<table border="1">
+<th>Voters (A-Z)</th>
<% for email in @voter_list %>
<tr>
<td><%= email %></td>
<% end %>
</table>
-<h2>Votes (by Token)</h2>
+<h3>Votes by Token</h3>
<p>The votes, listed in alphabetical order by token.</p>
<table border="1">
<tr>
- <th rowspan="2">Token</th>
+ <th rowspan="2">Token (0-9, A-Z)</th>
<th colspan="<%= @election.candidates.length %>">Rank of Candidates</th>
</tr>
<tr>
+
<% for candidate in @election.candidates.sort.reverse %>
<th><%= candidate %></th>
<% end %>
+
</tr>
<% for vote in @vote_list %>
-<tr>
-<td><%= vote.token %></td>
-<% for ranking in vote.rankings %>
-<td><%= ranking %></td>
-<% end %>
-</tr>
+ <tr>
+ <td><%= vote.token %></td>
+ <% for ranking in vote.rankings %>
+ <td><%= ranking %></td>
+ <% end %>
+ </tr>
<% end %>
</table>