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