class JpPrefecture::Prefecture::Finder
都道府県の検索を行うクラス
Public Class Methods
new()
click to toggle source
# File lib/jp_prefecture/prefecture/finder.rb, line 10 def initialize @mapping = Mapping.data end
Public Instance Methods
find(field:, value:)
click to toggle source
指定した項目を検索
@param field [Symbol] 検索する項目。nil の場合は都道府県コードとして扱う @param value [String, Integer] 検索する内容 @return [JpPrefecture::Prefecture] 都道府県が見つかった場合は都道府県インスタンス @return [nil] 都道府県が見つからない場合は nil
# File lib/jp_prefecture/prefecture/finder.rb, line 20 def find(field:, value:) code = find_code(field, value) JpPrefecture::Prefecture.build_by_code(code) end
Private Instance Methods
find_code(field, value)
click to toggle source
@param field [Symbol] 検索する項目 @param value [String, Integer] 検索する内容 @return [Integer] 見つかった場合は都道府県コード @return [nil] 見つからない場合は nil
# File lib/jp_prefecture/prefecture/finder.rb, line 31 def find_code(field, value) return value.to_i if field.nil? case field when :all_fields find_code_by_name_from_all_fields(value) when :name, :name_h, :name_k, :name_e find_code_by_name(field, value) when :code value.to_i when :zip ZipMapping.code_for_zip(value.to_i) end end
find_code_by_name(field, value)
click to toggle source
指定した項目を前方一致で検索
# File lib/jp_prefecture/prefecture/finder.rb, line 60 def find_code_by_name(field, value) return if value.nil? || value.empty? value = value.downcase @mapping.each do |m| return m[0] if m[1][field].start_with?(value) end end
find_code_by_name_from_all_fields(value)
click to toggle source
すべての項目を前方一致で検索
# File lib/jp_prefecture/prefecture/finder.rb, line 47 def find_code_by_name_from_all_fields(value) return if value.nil? || value.empty? value = value.downcase @mapping.each do |m| m[1].each_value do |v| return m[0] if v.start_with?(value) end end end