|
|
@@ -0,0 +1,61 @@ |
|
|
|
require_relative '../models' |
|
|
|
require 'pp' |
|
|
|
# $ ruby scripts/import-results-tsv.rb [ELECTION ID] [TSV FILENAME] |
|
|
|
|
|
|
|
# Import a TSV file of election results for a specified election |
|
|
|
# The election for which you're importing data must already exist in the elections table |
|
|
|
|
|
|
|
# Run setpositions.rb after this importer to set candidacies.position and candidacies.elected |
|
|
|
|
|
|
|
@election = Election.get(ARGV.shift) |
|
|
|
|
|
|
|
ARGF.each do |line| |
|
|
|
district_name, candidate_name, party, votes, elected = line.split("\t").map{ |e| e.strip } |
|
|
|
|
|
|
|
# District |
|
|
|
@district = District.first(:name => district_name) |
|
|
|
|
|
|
|
# Candidate |
|
|
|
# Assumes that the candidate name is written "forename surname" |
|
|
|
# bits = candidate_name.split(" ") |
|
|
|
# candidate_forenames = bits[0..-2].join(" ") |
|
|
|
# candidate_surname = bits.last |
|
|
|
|
|
|
|
# Assumes that the candidate name is written "surname, forename(s)" |
|
|
|
bits = candidate_name.split(", ") |
|
|
|
candidate_forenames = bits[1] |
|
|
|
candidate_surname = bits[0] |
|
|
|
|
|
|
|
@candidate = Candidate.first_or_create(:forenames => candidate_forenames, :surname => candidate_surname) |
|
|
|
|
|
|
|
pp @candidate |
|
|
|
unless @candidate.saved? |
|
|
|
$stderr.puts "Couldn't save candidate #{@candidate}" |
|
|
|
exit 1 |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
# Party |
|
|
|
@party = Party.first_or_create(:name => party) |
|
|
|
|
|
|
|
puts @party.name |
|
|
|
unless @party.saved? |
|
|
|
$stderr.puts "Couldn't save party #{@party}" |
|
|
|
exit 1 |
|
|
|
end |
|
|
|
|
|
|
|
# Candidacy |
|
|
|
@candidacy = Candidacy.create( |
|
|
|
:election => @election, |
|
|
|
:candidate => @candidate, |
|
|
|
:party => @party, |
|
|
|
:district => @district, |
|
|
|
:votes => votes |
|
|
|
) |
|
|
|
|
|
|
|
unless @candidacy.saved? |
|
|
|
$stderr.puts "Couldn't save candidacy #{@candidacy}" |
|
|
|
exit 1 |
|
|
|
end |
|
|
|
|
|
|
|
end |