Class: JpPrefecture::Prefecture

Inherits:
Object
  • Object
show all
Defined in:
lib/jp_prefecture/prefecture.rb,
lib/jp_prefecture/prefecture/finder.rb

Overview

都道府県のコードと名前を扱うクラス

Defined Under Namespace

Classes: Finder

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Attribute Details

#areaObject

Returns the value of attribute area.



10
11
12
# File 'lib/jp_prefecture/prefecture.rb', line 10

def area
  @area
end

#codeObject

Returns the value of attribute code.



10
11
12
# File 'lib/jp_prefecture/prefecture.rb', line 10

def code
  @code
end

#nameObject

Returns the value of attribute name.



10
11
12
# File 'lib/jp_prefecture/prefecture.rb', line 10

def name
  @name
end

#name_eObject

Returns the value of attribute name_e.



10
11
12
# File 'lib/jp_prefecture/prefecture.rb', line 10

def name_e
  @name_e
end

#name_hObject

Returns the value of attribute name_h.



10
11
12
# File 'lib/jp_prefecture/prefecture.rb', line 10

def name_h
  @name_h
end

#name_kObject

Returns the value of attribute name_k.



10
11
12
# File 'lib/jp_prefecture/prefecture.rb', line 10

def name_k
  @name_k
end

#name_rObject

Returns the value of attribute name_r.



10
11
12
# File 'lib/jp_prefecture/prefecture.rb', line 10

def name_r
  @name_r
end

#typeObject

Returns the value of attribute type.



10
11
12
# File 'lib/jp_prefecture/prefecture.rb', line 10

def type
  @type
end

#zipsObject

Returns the value of attribute zips.



10
11
12
# File 'lib/jp_prefecture/prefecture.rb', line 10

def zips
  @zips
end

Class Method Details

.allArray<JpPrefecture::Prefecture>

すべての都道府県を取得

Examples:

# 都道府県の一覧を取得
JpPrefecture::Prefecture.all

# collection_select で選択肢を生成
f.collection_select :prefecture_code, JpPrefecture::Prefecture.all, :code, :name

# collection_select で選択肢を生成(英語表記)
f.collection_select :prefecture_code, JpPrefecture::Prefecture.all, :code, :name_e

Returns:



57
58
59
# File 'lib/jp_prefecture/prefecture.rb', line 57

def self.all
  Mapping.data.map { |code, _| build_by_code(code) }
end

.build_by_code(code) ⇒ JpPrefecture::Prefecture?

都道府県コードから都道府県インスタンスを作成

Examples:

# 都道府県コードから都道府県インスタンスを生成
JpPrefecture::Prefecture.build_by_code(1)

Parameters:

  • code (Integer)

    都道府県コード

Returns:

  • (JpPrefecture::Prefecture)

    都道府県インスタンス

  • (nil)

    都道府県が見つからない場合は nil



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/jp_prefecture/prefecture.rb', line 21

def self.build_by_code(code) # rubocop:disable Metrics/AbcSize
  result = Mapping.data[code]
  return unless result

  pref = new

  pref.code = code
  pref.name = result[:name]
  pref.name_e = result[:name_e].try(:capitalize)
  pref.name_r = result[:name_r].try(:capitalize)
  pref.name_h = result[:name_h]
  pref.name_k = result[:name_k]
  pref.zips = ZipMapping.data[code]
  pref.area = result[:area]
  pref.type =
    case pref.name.try(:slice, -1)
    when '', '', '', ''
      pref.name[-1]
    end

  pref
end

.find(args) ⇒ JpPrefecture::Prefecture?

都道府県を検索

文字列は前方一致で検索する

Examples:

# 都道府県コードを検索
JpPrefecture::Prefecture.find(1)
JpPrefecture::Prefecture.find(code: 1)

# 都道府県名を検索
JpPrefecture::Prefecture.find(name: '北海道')
JpPrefecture::Prefecture.find(name: '東京')

# 英語表記の都道府県名を検索
JpPrefecture::Prefecture.find(name_e: 'Hokkaido')
JpPrefecture::Prefecture.find(name_e: 'hokkaido')

# ローマ字表記の都道府県名を検索
JpPrefecture::Prefecture.find(name_r: 'Hokkaidō')
JpPrefecture::Prefecture.find(name_r: 'hokkaidō')

# ひらがな表記の都道府県名を検索
JpPrefecture::Prefecture.find(name_h: 'ほっかいどう')

# カタカナ表記の都道府県名を検索
JpPrefecture::Prefecture.find(name_k: 'ホッカイドウ')

# すべての項目を検索
JpPrefecture::Prefecture.find(all_fields: '')

Parameters:

  • args (Integer)

    都道府県コード

  • args (Hash<Symbol, Integer>)

    :code 都道府県コード

  • args (Hash<Symbol, String>)

    :name 漢字表記/:name_e 英語表記/:name_r ローマ字表記/:name_h ひらがな表記/:name_k カタカナ表記

  • args (Hash<Symbol, Integer>)

    :zip 郵便番号

  • args (Hash<Symbol, (String, Integer)>)

    :all_fields マッピングに定義しているすべてのフィールドから検索

Returns:

  • (JpPrefecture::Prefecture)

    都道府県が見つかった場合は都道府県インスタンス

  • (nil)

    都道府県が見つからない場合は nil



98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/jp_prefecture/prefecture.rb', line 98

def self.find(args)
  return if args.nil?

  case args
  when Integer, String
    JpPrefecture::Prefecture::Finder.new.find(field: nil, value: args)
  when Hash
    search_field = args.keys.first
    search_value = args.values.first

    JpPrefecture::Prefecture::Finder.new.find(field: search_field, value: search_value)
  end
end