lib/jp_prefecture/prefecture.rb in jp_prefecture-0.5.0 vs lib/jp_prefecture/prefecture.rb in jp_prefecture-0.6.0

- old
+ new

@@ -17,18 +17,18 @@ # @param pref [Integer] 都道府県コード # @param name [String] 都道府県名 # @param name_e [String] 都道府県名(英語表記) # @param zips [Array] 郵便番号の配列 (array of ranges, can be used in ARel, e.g. User.where(zip: prefecture.zips)) def self.build(code, name, name_e) - p = self.new + pref = self.new - p.code = code - p.name = name - p.name_e = name_e.capitalize - p.zips = ZipMapping.data[code] + pref.code = code + pref.name = name + pref.name_e = name_e.capitalize + pref.zips = ZipMapping.data[code] - p + pref end # 都道府県を検索 # # @example @@ -37,10 +37,13 @@ # JpPrefecture::Prefecture.find(code: 1) # # # 都道府県名から検索 # JpPrefecture::Prefecture.find(name: '北海道') # + # # 都道府県名から検索(先頭一致) + # JpPrefecture::Prefecture.find(name: '東京') + # # # 英語表記の都道府県名から検索 # JpPrefecture::Prefecture.find(name: 'Hokkaido') # JpPrefecture::Prefecture.find(name: 'hokkaido') # # @param args [Integer] 都道府県コード @@ -94,18 +97,26 @@ end end protected - # 名前から都道府県コードを検索 + # 名前から都道府県コードを先頭一致で検索 + # + # @param name [String] 検索する都道府県名 + # @return [Integer] 見つかった場合は都道府県コード + # @return [nil] 見つからない場合は nil def self.find_code_by_name(name) - result = Mapping.data.select { |_, v| - v.has_value?(name.downcase) - }.first + name = name.downcase - return if result.nil? + Mapping.data.each do |m| + m[1].values.each do |v| + if v.start_with?(name) + return m[0] + end + end + end - result[0] + nil end end end