Module: Jipcode::AddressLocator

Defined in:
lib/jipcode/address_locator.rb,
lib/jipcode/address_locator/helper.rb,
lib/jipcode/address_locator/indexer.rb,
lib/jipcode/address_locator/locator.rb,
lib/jipcode/address_locator/version.rb,
lib/jipcode/address_locator/normalizer.rb

Constant Summary collapse

INDEX_PATH =
"#{File.dirname(__FILE__)}/../../zipcode/by_prefecture/latest"
INDEX_VERSION_FILE =
"#{File.dirname(__FILE__)}/../../zipcode/by_prefecture/version"
VERSION =
'0.1.2'
GAIKU_HYOUJI =

丁目・番・号・地割・番地をハイフンに置換する

1
%w[
  丁目
  番地
  番
  号
  地割
  の
].freeze

Class Method Summary collapse

Class Method Details

.create_index!Object

Create index files by Jipcode data.



20
21
22
23
24
25
26
27
28
# File 'lib/jipcode/address_locator/indexer.rb', line 20

def self.create_index!
  refresh_index_dir

  index = collect_index

  export_index(index)

  File.write(INDEX_VERSION_FILE, Jipcode::VERSION)
end

.exist_latest_index?Boolean

Make sure Jipcode version and index version are the same.

Returns:

  • (Boolean)

    result



12
13
14
15
16
17
# File 'lib/jipcode/address_locator/indexer.rb', line 12

def self.exist_latest_index?
  return false unless File.exist?(INDEX_VERSION_FILE)

  version = File.read(INDEX_VERSION_FILE)
  version == Jipcode::VERSION
end

.locate(search_address) ⇒ Array<Hash>

Locate zipcode data by address

Parameters:

  • search_address (String)

Returns:

  • (Array<Hash>)

    zipcode data



13
14
15
16
17
18
19
20
# File 'lib/jipcode/address_locator/locator.rb', line 13

def self.locate(search_address)
  normalized = normalize_address(search_address)

  find_by_address(normalized)
    .map { |address| calc_and_add_distance!(address, normalized) }
    .sort_by { |address| address['distance'] }
    .reverse
end

.normalize_address(raw_address) ⇒ String

Normalize japanese address for search.

Examples:

Jipcode::AddressLocator.normalize_address('稲穂県ミドリ市一番町一丁目2の3番')
# => '稲穂県ミドリ市一番町1-2-3'

Parameters:

  • raw_address (String)

Returns:

  • (String)

    normalized address



11
12
13
14
15
# File 'lib/jipcode/address_locator/normalizer.rb', line 11

def self.normalize_address(raw_address)
  zenkaku2hankaku(raw_address)
    .then { |address| kansuji2hankaku(address) }
    .then { |address| jukyohyouji2hyphen(address) }
end