worldwide 0.6.0 → 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|