Module: JpAddressComplement

Defined in:
lib/jp_address_complement/ken_all.rb,
lib/jp_address_complement.rb,
lib/jp_address_complement/railtie.rb,
lib/jp_address_complement/version.rb,
lib/jp_address_complement/searcher.rb,
lib/jp_address_complement/normalizer.rb,
lib/jp_address_complement/prefecture.rb,
lib/jp_address_complement/configuration.rb,
lib/jp_address_complement/address_record.rb,
lib/jp_address_complement/ken_all_downloader.rb,
lib/jp_address_complement/models/postal_code.rb,
lib/jp_address_complement/importers/csv_importer.rb,
lib/generators/jp_address_complement/install_generator.rb,
lib/jp_address_complement/validators/address_validator.rb,
lib/jp_address_complement/repositories/postal_code_repository.rb,
lib/jp_address_complement/repositories/csv_postal_code_repository.rb,
lib/jp_address_complement/repositories/active_record_postal_code_repository.rb

Overview

rbs_inline: enabled

Defined Under Namespace

Modules: Generators, Importers, KenAll, Prefecture, Repositories Classes: AddressRecord, AddressValidator, Configuration, Error, ImportError, KenAllDownloader, Normalizer, PostalCode, Railtie, Searcher

Constant Summary collapse

VERSION =

: String

'0.3.0'
ADDRESS_RECORD_ATTRIBUTES =

郵便番号に対応する住所データの値オブジェクト ActiveRecord インスタンスを返さないことでコアロジックの AR 依存を排除する

%i[
  postal_code
  pref_code
  pref
  city
  town
  kana_pref
  kana_city
  kana_town
  has_alias
  is_partial
  is_large_office
].freeze

Class Method Summary collapse

Class Method Details

.base_record_class ⇒ Object

PostalCode モデルの継承元。未設定時は ActiveRecord::Base(activerecord gem が利用可能な場合)。 Gemfile に指定されていても require 前だと defined? が false になり得るため、未ロード時は require を試す。



42
43
44
45
46
47
48
49
50
51
52
# File 'lib/jp_address_complement.rb', line 42

def base_record_class
  base = configuration.postal_code_model_base
  return base if base

  require 'active_record'
  ActiveRecord::Base
rescue LoadError => e
  raise Error,
        'ActiveRecord is not available. Add gem "activerecord" to your Gemfile, or set ' \
        "JpAddressComplement.configuration.postal_code_model_base. (#{e.message})"
end

.base_record_class=(klass) ⇒ Object



55
56
57
# File 'lib/jp_address_complement.rb', line 55

def base_record_class=(klass)
  configuration.postal_code_model_base = klass
end

.configuration ⇒ Configuration

現在の設定を返す

Returns:



35
36
37
# File 'lib/jp_address_complement.rb', line 35

def configuration
  @configuration ||= Configuration.new
end

.configure {|Configuration| ... } ⇒ Object

Gem の設定を行う

Yields:



28
29
30
# File 'lib/jp_address_complement.rb', line 28

def configure
  yield(configuration)
end

.postal_code_table_name ⇒ Object

PostalCode が参照するテーブル名。未設定時は 'jp_address_complement_postal_codes'。configuration.postal_code_table_name に委譲。



61
62
63
# File 'lib/jp_address_complement.rb', line 61

def postal_code_table_name
  configuration.postal_code_table_name || 'jp_address_complement_postal_codes'
end

.postal_code_table_name=(name) ⇒ Object



66
67
68
# File 'lib/jp_address_complement.rb', line 66

def postal_code_table_name=(name)
  configuration.postal_code_table_name = name
end

.prefecture_code_from_name(name) ⇒ String?

都道府県名(正式名称)から都道府県コードを2桁文字列で返す

Parameters:

  • name (String, nil) —

    都道府県の正式名称

Returns:

  • (String, nil) —

    2桁のコード(例: "13")。該当なし時は nil



120
121
122
# File 'lib/jp_address_complement.rb', line 120

def prefecture_code_from_name(name)
  Prefecture.code_from_name(name)
end

.prefecture_name_from_code(code) ⇒ String?

都道府県コード(JIS X 0401)から都道府県名を返す

Parameters:

  • code (String, Integer, nil) —

    都道府県コード(01–47)

Returns:

  • (String, nil) —

    都道府県名。該当なし時は nil



112
113
114
# File 'lib/jp_address_complement.rb', line 112

def prefecture_name_from_code(code)
  Prefecture.name_from_code(code)
end

.repository ⇒ Repositories::PostalCodeRepository

設定されたリポジトリを返す(デフォルトは ActiveRecord 実装)



79
80
81
# File 'lib/jp_address_complement.rb', line 79

def repository
  configuration.repository ||= default_repository
end

.reset_configuration! ⇒ Object

設定をリセットする(主にテスト用)



72
73
74
# File 'lib/jp_address_complement.rb', line 72

def reset_configuration!
  @configuration = Configuration.new
end

.search_by_postal_code(code) ⇒ Array<AddressRecord>

7桁郵便番号から住所レコードを検索する

Parameters:

  • code (String) —

    郵便番号(ハイフン・全角・〒 記号を自動正規化)

Returns:



87
88
89
# File 'lib/jp_address_complement.rb', line 87

def search_by_postal_code(code)
  Searcher.new(repository).search_by_postal_code(code)
end

.search_by_postal_code_prefix(prefix) ⇒ Array<AddressRecord>

郵便番号の先頭4桁以上から住所候補を検索する

Parameters:

  • prefix (String) —

    郵便番号の先頭部分(4桁以上)

Returns:



95
96
97
# File 'lib/jp_address_complement.rb', line 95

def search_by_postal_code_prefix(prefix)
  Searcher.new(repository).search_by_postal_code_prefix(prefix)
end

.search_postal_codes_by_address(pref:, city:, town: nil) ⇒ Array<[String, AddressRecord]>

都道府県・市区町村・町域から郵便番号候補を取得する(逆引き)。町域は前方一致。

Parameters:

  • pref (String) —

    都道府県名(正式名称)

  • city (String) —

    市区町村名

  • town (String, nil) (defaults to: nil) —

    町域名。省略可。指定時は前方一致で候補を返す

Returns:

  • (Array<[String, AddressRecord]>) —

    [郵便番号, AddressRecord] の配列。該当なし・入力不十分時は []



130
131
132
# File 'lib/jp_address_complement.rb', line 130

def search_postal_codes_by_address(pref:, city:, town: nil)
  Searcher.new(repository).search_postal_codes_by_address(pref: pref, city: city, town: town)
end

.valid_combination?(postal_code, address) ⇒ Boolean

郵便番号と住所文字列の整合性を検証する

Parameters:

  • postal_code (String) —

    郵便番号(自動正規化)

  • address (String) —

    住所文字列

Returns:

  • (Boolean)


104
105
106
# File 'lib/jp_address_complement.rb', line 104

def valid_combination?(postal_code, address)
  Searcher.new(repository).valid_combination?(postal_code, address)
end