class VoteResultStruct < ActionWebService::Struct
- member :plurality_winners, :string
- member :approval_winners, :string
- member :condorcet_winners, :string
- member :ssd_winners, :string
- member :borda_winners, :string
- member :errors, :string
+ member :plurality_winners, [:int]
+ member :approval_winners, [:int]
+ member :condorcet_winners, [:int]
+ member :ssd_winners, [:int]
+ member :borda_winners, [:int]
+ member :candidate_ids, [:int]
+ member :candidate_names, [:string]
+ member :errors, [:string]
end
class SelectricityAPI < ActionWebService::API::Base
api_method :cast_quickvote, :expects => [:int, :int, [[:int]]], :returns => [:string]
#############################################################
def index
- @election = ident_to_quickvote(params[:ident])
+ @election = QuickVote.ident_to_quickvote(params[:ident])
# if the person has specified an election, we show them the voting
# page. otherwise, we redirect back to main the page
def confirm
# we need the election to verify that we have the right voter
- election = ident_to_quickvote(params[:ident])
+ election = QuickVote.ident_to_quickvote(params[:ident])
# find out who the voter is for this election
@voter = QuickVoter.find_all(["session_id = ? and election_id = ?",
###############################################################
def results
- @election = ident_to_quickvote(params[:ident])
+ @election = QuickVote.ident_to_quickvote(params[:ident])
@election.results
@candidates = {}
@election.candidates.each {|c| @candidates[c.id] = c}
end
-
- private
- def ident_to_quickvote(ident)
- if ident.match(/^\d+$/)
- quickvote = QuickVote.find(ident)
- else
- quickvote = QuickVote.find_all(["name = ?", ident])[0]
- end
-
- return quickvote
- end
-
end
end
+
+ ### Convert a shortname or id into a QuickVote
+ def self.ident_to_quickvote(ident)
+ if ident.match(/^\d+$/)
+ quickvote = QuickVote.find(ident)
+ else
+ quickvote = QuickVote.find_all(["name = ?", ident])[0]
+ end
+
+ return quickvote
+ end
end
end
def get_quickvote_results(shortname)
#TODO: Validate shortname
- session=ActionController::Integration::Session.new
- debugger
- controller=session.get "quickvote/#{shortname}/results"
+ qv=QuickVote.ident_to_quickvote(shortname)
result=VoteResultStruct.new
- result.plurality_winners=session.controller.plurality_result.winners.inspect
- result.approval_winners=session.controller.approval_result.winners.inspect
- result.condorcet_winners=session.controller.condorcet_result.winners.inspect
- result.ssd_winners=session.controller.ssd_result.winners.inspect
- result.borda_winners=session.controller.borda_result.winners.inspect
+ result.errors=[]
+ unless qv
+ result.errors << "No quickvote with name #{shortname} found!"
+ return result
+ end
+ qv.results
+ result.plurality_winners=qv.plurality_result.winners
+ result.approval_winners=qv.approval_result.winners
+ result.condorcet_winners=qv.condorcet_result.winners
+ result.ssd_winners=qv.ssd_result.winners
+ result.borda_winners=qv.borda_result.winners
+ candidates={}
+ qv.candidates.each {|c| candidates[c.id] = c.name}
+ result.candidate_ids=candidates.keys
+ result.candidate_names=candidates.values
result
end
end