Sha256: e407f7e71b6ae75afb991fe6b69911158d9d72e6cea5729e27d175a94bd2c0aa
Contents?: true
Size: 1.96 KB
Versions: 3
Compression:
Stored size: 1.96 KB
Contents
require 'geonames_rails/mappings/base' require 'geonames_rails/mappings/city' require 'geonames_rails/mappings/country' require 'zip/zipfilesystem' module GeonamesRails class Loader def initialize(puller, writer, logger = nil) @logger = logger || STDOUT @puller = puller @writer = writer end def load_data @puller.pull if @puller # pull geonames files down load_countries load_cities @puller.cleanup if @puller # cleanup the geonames files end protected def load_countries log_message "opening countries file" File.open(File.join(Rails.root, 'tmp', 'countryInfo.txt'), 'r') do |f| f.each_line do |line| # skip comments next if line.match(/^#/) || line.match(/^iso/i) country_mapping = Mappings::Country.new(line) result = @writer.write_country(country_mapping) log_message result end end end def load_cities %w(cities1000 cities5000 cities15000).each do |city_file| load_cities_file(city_file) end end def load_cities_file(city_file) log_message "Loading city file #{city_file}" cities = [] Zip::ZipFile.open(File.join(Rails.root, 'tmp', "#{city_file}.zip"), 'r') do |zipfile| zipfile.each do |f| zipfile.read(f).split(/\n/).each { |line| cities << Mappings::City.new(line) } end end log_message "#{cities.length} cities to process" cities_by_country_code = cities.group_by { |city_mapping| city_mapping[:country_iso_code_two_letters] } cities_by_country_code.keys.each do |country_code| cities = cities_by_country_code[country_code] result = @writer.write_cities(country_code, cities) log_message result end end def log_message(message) @logger << message @logger << "\n" end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
geonames_rails-0.1.6 | lib/geonames_rails/loader.rb |
geonames_rails-0.1.5 | lib/geonames_rails/loader.rb |
geonames_rails-0.1.3 | lib/geonames_rails/loader.rb |