lib/japanese_address_parser/models/city.rb
# frozen_string_literal: true
require 'csv'
require 'pathname'
require_relative './town'
module JapaneseAddressParser
module Models
class City
attr_reader :code, :prefecture_code, :name, :name_kana, :name_romaji
def initialize(code:, prefecture_code:, name:, name_kana:, name_romaji:)
@code = code
@prefecture_code = prefecture_code
@name = name
@name_kana = name_kana
@name_romaji = name_romaji
end
def formatted_code
code.nil? ? 'UNKNOWN' : code
end
def attributes
{ code: code, formatted_code: formatted_code, prefecture_code: prefecture_code, name: name, name_kana: name_kana, name_romaji: name_romaji }
end
def prefecture
::JapaneseAddressParser::Models::Prefecture.all.find { |prefecture| prefecture.code == prefecture_code }
end
def towns
filepath = Pathname(__FILE__).dirname.join("../data/#{prefecture_code}-#{formatted_code}.csv")
::CSV.table(filepath, converters: nil).map do |town|
::JapaneseAddressParser::Models::Town.new(
name: town[:name],
name_kana: town[:name_kana],
name_romaji: town[:name_romaji],
nickname: town[:nickname],
latitude: town[:latitude],
longitude: town[:longitude]
)
end
end
end
end
end