class ChileanCities::Factory

Attributes

comunas[R]
provincias[R]
regiones[R]

Public Instance Methods

generate!() click to toggle source
# File lib/chilean_cities/factory.rb, line 12
def generate!

  @regiones = []
  @provincias = []
  @comunas = []

  data_file = File.read('data/comunas.json')

  data = MultiJson.load(data_file, symbolize_keys: true)

  data.each do |datum|
    comuna = Comuna.new(datum[:name], datum[:code])

    provincia = @provincias.select { |provincia| provincia.name == datum[:provincia] }.first ||
                Provincia.new(datum[:provincia])

    region = @regiones.select { |region| region.name == datum[:region] }.first ||
             Region.new(datum[:region], datum[:region_iso_3166_2])

    comuna.region = region
    comuna.provincia = comuna.contained_in = provincia
    @comunas << comuna unless @comunas.include? comuna

    provincia.region = provincia.contained_in = region
    provincia.append_comuna(comuna)
    @provincias << provincia unless @provincias.include? provincia

    region.append_comuna(comuna)
    region.append_provincia(provincia)
    @regiones << region unless @regiones.include? region
  end
  { comunas_count: @comunas.count, provincias_count: @provincias.count, regiones_count: @regiones.count }
end