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

Add results importer for TSV files
Add results importer for TSV files
