Skip to content

Commit 9020c42

Browse files
committed
allow zone lookup by partial zip if country hides provinces
1 parent e9cc59b commit 9020c42

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

lib/worldwide/region.rb

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,10 @@ def zone(code: nil, name: nil, zip: nil)
438438
search_name == I18n.with_locale(:en) { region.full_name&.upcase }
439439
end
440440
else # Worldwide::Util.present?(zip)
441-
zone_by_normalized_zip(Zip.normalize(country_code: iso_code, zip: zip))
441+
zone_by_normalized_zip(
442+
Zip.normalize(country_code: iso_code, zip: zip),
443+
allow_partial_zip: hide_provinces_from_addresses,
444+
)
442445
end || Worldwide.unknown_region
443446
end
444447

@@ -496,6 +499,13 @@ def province_optional?
496499
province_optional || !@zones&.any?(&:province?)
497500
end
498501

502+
# Returns true if this country has zones defined, and has postal code prefix data for the zones
503+
def has_zip_prefixes?
504+
@zones&.any? do |zone|
505+
Util.present?(zone.zip_prefixes)
506+
end
507+
end
508+
499509
private
500510

501511
def add_zone_to_hash(zone)
@@ -542,13 +552,6 @@ def cross_border_zip_includes_province?(zip:, province_code:)
542552
false
543553
end
544554

545-
# Returns true if this country has zones defined, and has postal code prefix data for the zones
546-
def has_zip_prefixes?
547-
@zones&.any? do |zone|
548-
Util.present?(zone.zip_prefixes)
549-
end
550-
end
551-
552555
def inspected_fields
553556
INSPECTION_FIELDS.map { |field_name| "@#{field_name}=#{send(field_name).inspect}" }.join(", ")
554557
end

test/worldwide/region_test.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,18 @@ class RegionTest < ActiveSupport::TestCase
159159
assert_equal "CA-BC", zone.iso_code
160160
end
161161

162+
test "#zone cannot look up a zone by partial zip if country shows provinces" do
163+
zone = Worldwide.region(code: "CA").zone(zip: "V6B") # Canada does not hide provinces
164+
165+
assert_equal Worldwide.unknown_region, zone
166+
end
167+
168+
test "#zone can look up a zone by partial zip if country hides provinces" do
169+
zone = Worldwide.region(code: "GB").zone(zip: "SW1") # UK hides provinces
170+
171+
assert_equal "GB-ENG", zone.iso_code
172+
end
173+
162174
test "#zone can look up zones that go by iso_code" do
163175
[
164176
["MX", "AGU", "MXAGU", "MX-AGU", "Aguascalientes"],
@@ -557,5 +569,11 @@ class RegionTest < ActiveSupport::TestCase
557569
assert Worldwide.region(code: "NZ").province_optional
558570
refute Worldwide.region(code: "CA").province_optional
559571
end
572+
573+
test "#has_zip_prefixes? returns values as expected" do
574+
refute_predicate Worldwide.region(code: "FR"), :has_zip_prefixes? # no zones
575+
refute_predicate Worldwide.region(code: "AR"), :has_zip_prefixes? # zones but no prefixes
576+
assert_predicate Worldwide.region(code: "US"), :has_zip_prefixes? # zones and prefixes
577+
end
560578
end
561579
end

0 commit comments

Comments
 (0)