X-Git-Url: https://projects.mako.cc/source/selectricity/blobdiff_plain/c5fda1e5174238779afd496014379d6446d1e3c1..e8094b780ec0f30ac06b4de4c4f3a9c2bffe209d:/app/models/vote.rb?ds=sidebyside diff --git a/app/models/vote.rb b/app/models/vote.rb index 82f34a9..21b5408 100644 --- a/app/models/vote.rb +++ b/app/models/vote.rb @@ -7,13 +7,13 @@ class Vote < ActiveRecord::Base # callbacks after_update :save_rankings before_destroy :destroy_rankings - + def to_s votes.join("") end def each - votes.each {|vote| yield vote} + self.votes.each {|vote| yield vote} end def votes @@ -34,43 +34,61 @@ class Vote < ActiveRecord::Base def save_rankings destroy_rankings - self.votes.each_with_index do |candidate, index| + self.votes.each_with_index do |candidate_id, index| ranking = Ranking.new - ranking.rank = index + 1 - ranking.candidate = Candidate.find(candidate) + ranking.rank = index + ranking.candidate = Candidate.find(candidate_id) self.rankings << ranking end end + + def destroy + self.destroy_rankings + super + end def destroy_rankings rankings.each { |ranking| ranking.destroy } end - def confirm! - self.confirmed = 1 + def settime + self.time = Time.now self.save + end - token.destroy and token.reload if token - self.token = Token.new + def confirm! + self.confirmed = 1 self.save + + unless self.voter.election.quickvote? + token.destroy and token.reload if token + self.token = Token.new + self.save + end end def confirm? - if confirm == 1 - return true - else - return false - end + confirmed == 1 end - def votestring=(string="") - candidate_ids = voter.election.candidates.sort.collect \ - { |candidate| candidate.id.to_i } + def votestring + # create a mapping of candidates ids and the relative order of the + # candidates as they appear when sorted alphabetically + cand_relnums = {} + self.voter.election.candidates.sort.each_with_index do |c, i| + cand_relnums[c.id] = i + 1 + end - rel_votes = string.split("").collect { |vote| vote.to_i } - - # covert relative orders to absolute candidate ids - self.votes = rel_votes.collect { |vote| candidate_ids[ vote - 1 ] } + # assemble the votestring + self.votes.collect {|v| (cand_relnums[v] + 64).chr}.join("") end + # the following subroutine is used for quickvotes, but need for elections now + # too. It creates a vote with the candidates listed in order of preference + # based on alphabetical order. Meant to be manipulated and then confirmed + def set_defaults! + self.votes = voter.election.candidates.sort.collect {|c| c.id } + self.save + end + end