From 3c5d8b70382978305aa4391537a17a051130cb2c Mon Sep 17 00:00:00 2001 From: Kenta Okamoto <85665+chocoby@users.noreply.github.com> Date: Sat, 1 Aug 2026 17:15:44 +0900 Subject: [PATCH] fix: accept non-String values in prefecture name searches --- lib/jp_prefecture/prefecture.rb | 2 +- lib/jp_prefecture/prefecture/finder.rb | 10 ++++------ spec/prefecture/finder_spec.rb | 10 ++++++++++ 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/lib/jp_prefecture/prefecture.rb b/lib/jp_prefecture/prefecture.rb index 9178ec2..d07edec 100644 --- a/lib/jp_prefecture/prefecture.rb +++ b/lib/jp_prefecture/prefecture.rb @@ -92,7 +92,7 @@ def self.all # @param args [Hash] :code 都道府県コード # @param args [Hash] :name 漢字表記/:name_e 英語表記/:name_r ローマ字表記/:name_h ひらがな表記/:name_k カタカナ表記 # @param args [Hash] :zip 郵便番号 - # @param args [Hash] :all_fields マッピングに定義しているすべてのフィールドから検索 + # @param args [Hash] :all_fields マッピングに定義しているすべてのフィールドから検索 # @return [JpPrefecture::Prefecture] 都道府県が見つかった場合は都道府県インスタンス # @return [nil] 都道府県が見つからない場合は nil def self.find(args) diff --git a/lib/jp_prefecture/prefecture/finder.rb b/lib/jp_prefecture/prefecture/finder.rb index 492c95f..1e7de9f 100644 --- a/lib/jp_prefecture/prefecture/finder.rb +++ b/lib/jp_prefecture/prefecture/finder.rb @@ -33,9 +33,9 @@ def find_code(field, value) case field when :all_fields - find_code_by_name_from_all_fields(value) + find_code_by_name_from_all_fields(value.to_s) when :name, :name_h, :name_k, :name_e, :name_r - find_code_by_name(field, value) + find_code_by_name(field, value.to_s) when :code value.to_i when :zip @@ -45,9 +45,8 @@ def find_code(field, value) # すべての項目を前方一致で検索 def find_code_by_name_from_all_fields(value) - return if value.nil? || value.empty? - value = value.downcase + return if value.empty? @mapping.each do |m| m[1].each_value do |v| @@ -58,9 +57,8 @@ def find_code_by_name_from_all_fields(value) # 指定した項目を前方一致で検索 def find_code_by_name(field, value) - return if value.nil? || value.empty? - value = value.downcase + return if value.empty? @mapping.each do |m| return m[0] if m[1][field].start_with?(value) diff --git a/spec/prefecture/finder_spec.rb b/spec/prefecture/finder_spec.rb index e088bdd..bd45906 100644 --- a/spec/prefecture/finder_spec.rb +++ b/spec/prefecture/finder_spec.rb @@ -68,6 +68,16 @@ it_behaves_like '都道府県が見つからない', :zip, '999999' end + describe 'value に String 以外を指定する' do + it_behaves_like '都道府県が見つかる', :all_fields, :東, '青森県' + it_behaves_like '都道府県が見つかる', :name, :北海道, '北海道' + it_behaves_like '都道府県が見つかる', :name_e, :hokkaido, '北海道' + it_behaves_like '都道府県が見つからない', :all_fields, 13 + it_behaves_like '都道府県が見つからない', :name, 1 + it_behaves_like '都道府県が見つからない', :all_fields, nil + it_behaves_like '都道府県が見つからない', :name, nil + end + describe 'field を指定しない' do it_behaves_like '都道府県が見つかる', nil, 1, '北海道' it_behaves_like '都道府県が見つかる', nil, '1', '北海道'