GSA/jobs_api

View on GitHub
lib/importers/geonames_data.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

class GeonamesData
  LOCATION = 1
  LAT = 4
  LON = 5
  STATE = 10

  def initialize(filename)
    @filename = filename
  end

  def import
    geonames = File.open(@filename).collect do |line|
      fields = line.split("\t")
      location = fields[LOCATION]
      state = fields[STATE]
      lat = fields[LAT].to_f
      lon = fields[LON].to_f
      { type: 'geoname', location: geoname_normalized_city(location), state: state, geo: { lat: lat, lon: lon } }
    end
    puts "Importing #{geonames.size} geonames ..."
    running_total = 0
    geonames.in_groups_of(1000, false) do |group|
      Geoname.import group
      running_total += group.count
      puts "#{running_total}..."
    end
  end

  def geoname_normalized_city(location)
    location.sub(/,? ?D\.? ?C\.?/, '')
  end
end