소스 검색

Pass election date as command line option; prevent running on byelections; tidy output

tags/last-sinatra-version
Adrian Short 11 년 전
부모
커밋
ac8d1eb4bb
1개의 변경된 파일35개의 추가작업 그리고 14개의 파일을 삭제
  1. +35
    -14
      scripts/setpositions.rb

+ 35
- 14
scripts/setpositions.rb 파일 보기

@@ -2,20 +2,41 @@ require_relative '../models'
require 'pp'

# Set position and elected for each candidacy
# WARNING - This will only work in full council elections not byelections (as the number of seats being elected in that eleciton is probably less than the total number of seats in the ward)
# This will break all the byelection data currently in the database

Election.all.each do |election|
election.body.districts.each do |district|
cands = Candidacy.all(:conditions => { :district_id => district.id, :election_id => election.id }, :order => [:votes.desc])
pp cands
puts
pos = 1
cands.each do |cand|
pos <= district.seats ? seats = 1 : seats = 0
print cand.candidate.surname, ' ', cand.votes, ' ', pos, ' ', seats, "\n"
cand.position = pos
cand.seats = seats
cand.save
pos += 1
election = Election.first(:d => ARGV.shift)

unless election
puts "Election not found. Usage example: $ %s 2006-05-04" % __FILE__
exit 1
end

puts "Setting candidacy positions for %s %s %s" % [ election.body.name, election.kind, election.d.to_s ]
if election.candidacies.size < 30
puts "This script only works for full council elections. Your election looks like a byelection, so quitting."
exit 1
end
puts "%d candidacies in this election" % election.candidacies.size

election.body.districts.each do |district|
cands = Candidacy.all(:conditions => { :district_id => district.id, :election_id => election.id }, :order => [:votes.desc])
# pp cands
puts
pos = 1
cands.each do |cand|
if pos == 1
puts "-" * 62
puts district.name
puts "-" * 62
end

# If this candidate's position was in the top district.seats positions, they won a seat
pos <= district.seats ? seats = 1 : seats = 0
puts "%-25s %-25s %5d %2d %d" % [ cand.candidate.surname, cand.candidate.forenames, cand.votes, pos, seats ]
cand.position = pos
cand.seats = seats
cand.save
pos += 1
end
end
end

불러오는 중...
취소
저장