Sha256: fd2ebc1aef0e7c0e1b75d4fd31e0da5f51ed7b9a9f7b5c5b07a211b37591a3c3
Contents?: true
Size: 1.79 KB
Versions: 1
Compression:
Stored size: 1.79 KB
Contents
# frozen_string_literal: true require 'number_to_kanji' require_relative './address_parser/pattern_creator' require_relative './address_parser/town_and_after_normalizer' require_relative './models/address' require_relative './models/prefecture' module JapaneseAddressParser module AddressParser def call(full_address) prefecture = ::JapaneseAddressParser::Models::Prefecture.all.find { |candidate| full_address.start_with?(candidate.name) } return _build_address(full_address: full_address) if prefecture.nil? city_and_after = full_address.delete_prefix(prefecture.name) city = prefecture.cities.find { |candidate| city_and_after.start_with?(candidate.name) } return _build_address(full_address: full_address, prefecture: prefecture) if city.nil? town_and_after = city_and_after.delete_prefix(city.name) normalized_town_and_after = ::JapaneseAddressParser::AddressParser::TownAndAfterNormalizer.call(town_and_after) town_and_after_pattern = ::JapaneseAddressParser::AddressParser::PatternCreator.call(normalized_town_and_after) # 多くの場合は正規表現によって一致する町を見つけられる。 # しかし慣例に従った表記にしている場合は見つからない可能性があるので、前方一致も試してみる。 town = city.towns.find { |candidate| town_and_after_pattern.match?(candidate.name) } _build_address(full_address: full_address, prefecture: prefecture, city: city, town: town) end def _build_address(full_address:, prefecture: nil, city: nil, town: nil) ::JapaneseAddressParser::Models::Address.new(full_address: full_address, prefecture: prefecture, city: city, town: town) end module_function :call, :_build_address private_class_method :_build_address end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
japanese_address_parser-1.1.0 | lib/japanese_address_parser/address_parser.rb |