module Jipcode

Constants

PREFECTURE_CODE
VERSION
ZIPCODE_PATH

Public Class Methods

basic_address_from(address_param) click to toggle source
# File lib/jipcode.rb, line 27
def basic_address_from(address_param)
  {
    zipcode:    address_param[0],
    prefecture: address_param[1],
    city:       address_param[2],
    town:       address_param[3]
  }
end
extended_address_from(address_param, opt={}) click to toggle source
# File lib/jipcode.rb, line 36
def extended_address_from(address_param, opt={})
  address = basic_address_from(address_param)
  address[:prefecture_code] = PREFECTURE_CODE.invert[address_param[1]] if opt[:prefecture_code]
  address
end
locate(zipcode, opt={}) click to toggle source
# File lib/jipcode.rb, line 9
def locate(zipcode, opt={})
  # 数字7桁以外の入力は受け付けない
  return [] unless zipcode&.match?(/\A\d{7}?\z/)

  # 上3桁にマッチするファイルが存在しなければ該当なし
  path = "#{ZIPCODE_PATH}/#{zipcode[0..2]}.csv"
  return [] unless File.exist?(path)

  addresses_array = CSV.read(path).select { |address| address[0] == zipcode }

  if opt.empty?
    # optが空の場合、直接basic_address_fromを呼んで不要な判定を避ける。
    addresses_array.map { |address_param| basic_address_from(address_param) }
  else
    addresses_array.map { |address_param| extended_address_from(address_param, opt) }
  end
end

Private Instance Methods

basic_address_from(address_param) click to toggle source
# File lib/jipcode.rb, line 27
def basic_address_from(address_param)
  {
    zipcode:    address_param[0],
    prefecture: address_param[1],
    city:       address_param[2],
    town:       address_param[3]
  }
end
extended_address_from(address_param, opt={}) click to toggle source
# File lib/jipcode.rb, line 36
def extended_address_from(address_param, opt={})
  address = basic_address_from(address_param)
  address[:prefecture_code] = PREFECTURE_CODE.invert[address_param[1]] if opt[:prefecture_code]
  address
end
locate(zipcode, opt={}) click to toggle source
# File lib/jipcode.rb, line 9
def locate(zipcode, opt={})
  # 数字7桁以外の入力は受け付けない
  return [] unless zipcode&.match?(/\A\d{7}?\z/)

  # 上3桁にマッチするファイルが存在しなければ該当なし
  path = "#{ZIPCODE_PATH}/#{zipcode[0..2]}.csv"
  return [] unless File.exist?(path)

  addresses_array = CSV.read(path).select { |address| address[0] == zipcode }

  if opt.empty?
    # optが空の場合、直接basic_address_fromを呼んで不要な判定を避ける。
    addresses_array.map { |address_param| basic_address_from(address_param) }
  else
    addresses_array.map { |address_param| extended_address_from(address_param, opt) }
  end
end