Sha256: 7c905baabb56ef1241719b9220f31a85b30e6ed349c6ac21fcd35839ef53f6dd

Contents?: true

Size: 1.29 KB

Versions: 14

Compression:

Stored size: 1.29 KB

Contents

# frozen_string_literal: true

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)

      return _build_address(full_address: full_address, prefecture: prefecture, city: city) if town_and_after.empty?

      town = city.towns.find { |candidate| town_and_after == 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

14 entries across 14 versions & 1 rubygems

Version Path
japanese_address_parser-3.1.2 lib/japanese_address_parser/address_parser.rb
japanese_address_parser-3.1.1 lib/japanese_address_parser/address_parser.rb
japanese_address_parser-3.1.0 lib/japanese_address_parser/address_parser.rb
japanese_address_parser-3.0.5 lib/japanese_address_parser/address_parser.rb
japanese_address_parser-3.0.4 lib/japanese_address_parser/address_parser.rb
japanese_address_parser-3.0.3 lib/japanese_address_parser/address_parser.rb
japanese_address_parser-3.0.2 lib/japanese_address_parser/address_parser.rb
japanese_address_parser-3.0.1 lib/japanese_address_parser/address_parser.rb
japanese_address_parser-3.0.0 lib/japanese_address_parser/address_parser.rb
japanese_address_parser-2.2.1 lib/japanese_address_parser/address_parser.rb
japanese_address_parser-2.2.0 lib/japanese_address_parser/address_parser.rb
japanese_address_parser-2.1.1 lib/japanese_address_parser/address_parser.rb
japanese_address_parser-2.1.0 lib/japanese_address_parser/address_parser.rb
japanese_address_parser-2.0.0 lib/japanese_address_parser/address_parser.rb