worldwide 0.6.0 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -1
- data/Gemfile.lock +1 -1
- data/db/data/regions/DK.yml +1 -0
- data/lib/worldwide/region.rb +26 -14
- data/lib/worldwide/version.rb +1 -1
- data/lib/worldwide/zip.rb +9 -9
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 378551ef286d7b7f398ee9ca149e417ac0f85efbba591a97fa8373de299258fd
|
4
|
+
data.tar.gz: 2a26ebd6f73862b5cc01bdae65ed710dbb7af5666a65f11d224bb529acb32d15
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6487ee321f130d34da0da8f58bf0bcc38815eecbec6f502358204a859b22c31afc6e9bfe3d8ee002b4e57e3b50040aca9fda443fc05889d62165755c706b449f
|
7
|
+
data.tar.gz: 1caf34f3c88a07fb3aa532f8192caf1a448af2795b710369645c1841cad6de722fe525833fff4b25a0c992fdb853e6fadf2ffc4244ee4aec0ee6073953147744
|
data/CHANGELOG.md
CHANGED
@@ -27,10 +27,20 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
27
27
|
|
28
28
|
## [Unreleased]
|
29
29
|
|
30
|
-
- nil
|
30
|
+
- nil.
|
31
31
|
|
32
32
|
---
|
33
33
|
|
34
|
+
[0.6.2] - 2023-12-11
|
35
|
+
|
36
|
+
- Zone lookup by Hash [#61](https://github.com/Shopify/worldwide/pull/61)
|
37
|
+
|
38
|
+
[0.6.1] - 2023-12-11
|
39
|
+
|
40
|
+
- Allow building number in address2 for DK [#53](https://github.com/Shopify/worldwide/pull/53)
|
41
|
+
- Avoid .present? and .blank? so we don't require Rails [#57](https://github.com/Shopify/worldwide/pull/57)
|
42
|
+
- (bugfix) Zone lookup by name [#58](https://github.com/Shopify/worldwid/pull/58)
|
43
|
+
|
34
44
|
[0.6.0] - 2023-12-08
|
35
45
|
|
36
46
|
- Add localized concern messages for address1 + 2 warnings and address may not exist message [#54](https://github.com/Shopify/worldwide/pull/54)
|
data/Gemfile.lock
CHANGED
data/db/data/regions/DK.yml
CHANGED
data/lib/worldwide/region.rb
CHANGED
@@ -249,6 +249,7 @@ module Worldwide
|
|
249
249
|
|
250
250
|
@parents = [].to_set
|
251
251
|
@zones = []
|
252
|
+
@zones_by_code = {}
|
252
253
|
end
|
253
254
|
|
254
255
|
def inspect
|
@@ -262,6 +263,7 @@ module Worldwide
|
|
262
263
|
|
263
264
|
region.parents << self
|
264
265
|
@zones.append(region)
|
266
|
+
add_zone_to_hash(region)
|
265
267
|
end
|
266
268
|
|
267
269
|
# Attributes
|
@@ -320,6 +322,7 @@ module Worldwide
|
|
320
322
|
# A user-facing name in the currently-active locale's language.
|
321
323
|
def full_name(locale: I18n.locale)
|
322
324
|
lookup_code = cldr_code
|
325
|
+
|
323
326
|
if /^[0-9]+$/.match?(lookup_code) || lookup_code.length < 3
|
324
327
|
Worldwide::Cldr.t("territories.#{lookup_code}", locale: locale, default: legacy_name)
|
325
328
|
else
|
@@ -358,24 +361,22 @@ module Worldwide
|
|
358
361
|
if Worldwide::Util.present?(code)
|
359
362
|
search_code = code.to_s.upcase
|
360
363
|
alt_search_code = "#{search_code[0..1]}-#{search_code[2..-1]}"
|
364
|
+
zone = nil
|
361
365
|
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
candidate == region.alpha_three ||
|
366
|
-
candidate == region.iso_code ||
|
367
|
-
candidate == region.legacy_code ||
|
368
|
-
candidate == region.numeric_three ||
|
369
|
-
region&.code_alternates&.any?(candidate)
|
370
|
-
end
|
366
|
+
[search_code, alt_search_code].each do |candidate|
|
367
|
+
zone = @zones_by_code[candidate]
|
368
|
+
break if zone
|
371
369
|
end
|
370
|
+
|
371
|
+
return zone unless zone.nil?
|
372
372
|
elsif Worldwide::Util.present?(name)
|
373
373
|
search_name = name.upcase
|
374
374
|
|
375
375
|
zones.find do |region|
|
376
|
-
search_name == region.legacy_name
|
377
|
-
search_name ==
|
378
|
-
search_name ==
|
376
|
+
search_name == region.legacy_name&.upcase ||
|
377
|
+
region.name_alternates&.any? { |a| search_name == a.upcase } ||
|
378
|
+
search_name == region.full_name&.upcase ||
|
379
|
+
search_name == I18n.with_locale(:en) { region.full_name&.upcase }
|
379
380
|
end
|
380
381
|
else # Worldwide::Util.present?(zip)
|
381
382
|
zone_by_normalized_zip(Zip.normalize(country_code: iso_code, zip: zip))
|
@@ -413,6 +414,17 @@ module Worldwide
|
|
413
414
|
|
414
415
|
private
|
415
416
|
|
417
|
+
def add_zone_to_hash(zone)
|
418
|
+
@zones_by_code[subdivision_code(zone.iso_code)] = zone if Util.present?(subdivision_code(zone.iso_code))
|
419
|
+
@zones_by_code[zone.alpha_three] = zone if Util.present?(zone.alpha_three)
|
420
|
+
@zones_by_code[zone.iso_code] = zone if Util.present?(zone.iso_code)
|
421
|
+
@zones_by_code[zone.legacy_code] = zone if Util.present?(zone.legacy_code)
|
422
|
+
@zones_by_code[zone.numeric_three] = zone if Util.present?(zone.numeric_three)
|
423
|
+
zone.code_alternates&.each do |code|
|
424
|
+
@zones_by_code[code] = zone
|
425
|
+
end
|
426
|
+
end
|
427
|
+
|
416
428
|
def answers_to_cldr_code(search_code)
|
417
429
|
return false if Util.blank?(search_code) || Util.blank?(cldr_code)
|
418
430
|
return true if search_code.casecmp(cldr_code).zero?
|
@@ -444,7 +456,7 @@ module Worldwide
|
|
444
456
|
# Returns true if this country has zones defined, and has postal code prefix data for the zones
|
445
457
|
def has_zip_prefixes?
|
446
458
|
@zones&.any? do |zone|
|
447
|
-
zone.zip_prefixes
|
459
|
+
Util.present?(zone.zip_prefixes)
|
448
460
|
end
|
449
461
|
end
|
450
462
|
|
@@ -471,7 +483,7 @@ module Worldwide
|
|
471
483
|
|
472
484
|
adjusted_value = partial_match ? value.strip : value
|
473
485
|
|
474
|
-
Regexp.new(regex_prefix).match(adjusted_value)
|
486
|
+
Util.present?(Regexp.new(regex_prefix).match(adjusted_value))
|
475
487
|
end
|
476
488
|
|
477
489
|
# Search a list of zip prefixes (by province or timezone) to find the element that corresponds to the zip
|
data/lib/worldwide/version.rb
CHANGED
data/lib/worldwide/zip.rb
CHANGED
@@ -50,7 +50,7 @@ module Worldwide
|
|
50
50
|
# @param min_confidence [Integer] The minimum confidence level (between 0-100) that is accepted from a suggestion (optional)
|
51
51
|
# @return [Region] which is a "country" if we have a suggestion, or `nil` if we do not.
|
52
52
|
def find_country(country_code: nil, zip:, min_confidence: 0)
|
53
|
-
return nil unless
|
53
|
+
return nil unless Util.present?(zip)
|
54
54
|
|
55
55
|
country = Worldwide.region(code: country_code) unless country_code.nil?
|
56
56
|
return country if country&.valid_zip?(zip)
|
@@ -68,8 +68,8 @@ module Worldwide
|
|
68
68
|
# We'll see if we have only a single suggestion and, if so, return it.
|
69
69
|
# In cases where there's more than one possible match, we'll return nil.
|
70
70
|
suggestions = find_country_using_zip_alone(adjusted_zip)
|
71
|
-
suggestion = suggestions.first[0] unless
|
72
|
-
confidence = suggestions.first[1] unless
|
71
|
+
suggestion = suggestions.first[0] unless Util.blank?(suggestions)
|
72
|
+
confidence = suggestions.first[1] unless Util.blank?(suggestions)
|
73
73
|
|
74
74
|
return suggestion if suggestions.length == 1 && confidence && confidence >= min_confidence
|
75
75
|
|
@@ -90,7 +90,7 @@ module Worldwide
|
|
90
90
|
|
91
91
|
if allow_autofill
|
92
92
|
autofill = country.autofill_zip
|
93
|
-
return autofill if
|
93
|
+
return autofill if Util.present?(autofill)
|
94
94
|
end
|
95
95
|
|
96
96
|
return nil if zip.nil?
|
@@ -163,7 +163,7 @@ module Worldwide
|
|
163
163
|
end
|
164
164
|
|
165
165
|
def strip_optional_country_prefix(country_code:, zip:)
|
166
|
-
return zip if
|
166
|
+
return zip if Util.blank?(zip)
|
167
167
|
|
168
168
|
unless OPTIONAL_PREFIX_COUNTRIES.include?(country_code&.to_sym)
|
169
169
|
return zip
|
@@ -604,7 +604,7 @@ module Worldwide
|
|
604
604
|
return zip
|
605
605
|
end
|
606
606
|
|
607
|
-
return zip if
|
607
|
+
return zip if Util.blank?(zip)
|
608
608
|
|
609
609
|
autocorrected_zips = []
|
610
610
|
input = zip
|
@@ -727,7 +727,7 @@ module Worldwide
|
|
727
727
|
end
|
728
728
|
|
729
729
|
def normalize_for_bd(zip:)
|
730
|
-
return zip if
|
730
|
+
return zip if Util.blank?(zip)
|
731
731
|
|
732
732
|
m = zip.match(/^(GPO:?|DHAKA)(\d{4})$/)
|
733
733
|
if m.nil?
|
@@ -834,10 +834,10 @@ module Worldwide
|
|
834
834
|
return zip if zip.nil?
|
835
835
|
|
836
836
|
m = zip.match(/^0?0?0?0?([1-9])0?0?$/)
|
837
|
-
return "00#{m[1]}00" if
|
837
|
+
return "00#{m[1]}00" if Util.present?(m)
|
838
838
|
|
839
839
|
m = zip.match(/^0?0?1([1-9])0?0?$/)
|
840
|
-
return "01#{m[1]}00" if
|
840
|
+
return "01#{m[1]}00" if Util.present?(m)
|
841
841
|
|
842
842
|
if zip.match?(/^[1-9][0-9]00$/)
|
843
843
|
"#{zip}0"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: worldwide
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shopify
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-12-
|
11
|
+
date: 2023-12-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|