worldwide 1.10.0 → 1.11.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e95f2e0fb163b3ca71052724364003e66adaede98d891ba85b9fcb950bb45403
4
- data.tar.gz: 87597cf4738a6cad9e32d1a13f1aad9bca0dc67c49999e18ab712fa9bc0b4ced
3
+ metadata.gz: 7b1b899bdd7349cec9a36e0468737cd103b14587aa6db1eec80199e4240f9d23
4
+ data.tar.gz: 9a6d60fed160223ada223c51781df60010a8b5b9abd44b58dbef2ccd80bf1d41
5
5
  SHA512:
6
- metadata.gz: c9d46c593759a7470a3c2c3cab66ea9100f1afdada955c54cdedcb63ab6a9fb1ca2365596e69301fd8f8194f5f82a19a042ea95096cee6c766cad85fc58dbb5a
7
- data.tar.gz: 90a72f40fb35d3f782f190833f52c7e09625a32f7972fb757edb3d9ebb097050c0c38037846b293e5e84f637feb3e014faf185b5ea0dffbdba953759ea76b252
6
+ metadata.gz: a75e2c881aef0bb5ca318696c4e53d14f5524bb67f91737f74bc1ce1a4a30b4903656e2201f4306df463224f04809968ec622671083d1b2910c0c318614f6365
7
+ data.tar.gz: f44bbef128f4da580f363d32866752c0e1acaea9d04f85cb1113faf4a5cca37ae941581db624740870f20a955e14ffd2ebec466dc4790ee80dc3ebcc86d3a824
data/CHANGELOG.md CHANGED
@@ -27,9 +27,18 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
27
27
 
28
28
  ## [Unreleased]
29
29
  - Nil.
30
-
31
30
  ---
32
31
 
32
+ ## [1.11.1] - 2024-10-02
33
+ - Configure regexp timeout in Worldwide#Phone [#290](https://github.com/Shopify/worldwide/pull/290)
34
+
35
+ ## [1.11.0] - 2024-10-02
36
+ - Add address1_regex to regions [#281](https://github.com/Shopify/worldwide/pull/281)
37
+ - Add address1_regex for BE, CL, MX, ES, IL [#282](https://github.com/Shopify/worldwide/pull/282)
38
+ - Add address1_regex for DE [#286](https://github.com/Shopify/worldwide/pull/286)
39
+ - Update legacy timezone mappings for Europe/Kiev [#288](https://github.com/Shopify/worldwide/pull/288)
40
+
41
+
33
42
  ## [1.10.0] - 2024-09-16
34
43
  - Add alternate Arabic names for UAE zones [#283](https://github.com/Shopify/worldwide/pull/283)
35
44
 
data/Gemfile.lock CHANGED
@@ -13,7 +13,7 @@ GIT
13
13
  PATH
14
14
  remote: .
15
15
  specs:
16
- worldwide (1.10.0)
16
+ worldwide (1.11.1)
17
17
  activesupport (>= 7.0)
18
18
  i18n
19
19
  phonelib (~> 0.8)
@@ -31,6 +31,9 @@ format:
31
31
  show: "{firstName} {lastName}_{company}_{address1}_{address2}_{zip} {city}_{country}_{phone}"
32
32
  format_extended:
33
33
  edit: "{country}_{firstName}{lastName}_{company}_{streetName}{streetNumber}_{address2}_{zip}{city}_{phone}"
34
+ address1_regex:
35
+ - "^(?<streetName>[^\\d,]+),? (?<streetNumber>\\d+(?: ?[a-z])?)$"
36
+ - "^(?<streetNumber>\\d+(?: ?[a-z])?),? (?<streetName>[^\\d,]+)$"
34
37
  additional_address_fields:
35
38
  - name: streetName
36
39
  required: true
@@ -28,6 +28,8 @@ format:
28
28
  show: "{firstName} {lastName}_{company}_{address1}_{address2}_{zip} {city} {province}_{country}_{phone}"
29
29
  format_extended:
30
30
  edit: "{country}_{firstName}{lastName}_{company}_{zip}_{streetName}{streetNumber}_{line2}{neighborhood}_{city}{province}_{phone}"
31
+ address1_regex:
32
+ - "^(?<streetName>(?!.*\\bnúmero\\b)[^\\d,]+(?<!\\s))(?:,? ?)(?<streetNumber>\\d+(?: ?[a-z])?)$"
31
33
  additional_address_fields:
32
34
  - name: streetName
33
35
  required: true
@@ -16,6 +16,8 @@ format:
16
16
  show: "{firstName} {lastName}_{company}_{address1}_{address2}_{zip} {city}_{province}_{country}_{phone}"
17
17
  format_extended:
18
18
  edit: "{country}_{firstName}{lastName}_{company}_{streetName}{streetNumber}_{line2}{neighborhood}_{zip}{city}_{province}_{phone}"
19
+ address1_regex:
20
+ - "^(?<streetName>[^\\d,]+?),? (?<streetNumber>(?:n|n\\.|nº|número|no\\.|no|#)? ?\\d+(?: ?[a-z])?)$"
19
21
  additional_address_fields:
20
22
  - name: streetName
21
23
  required: true
@@ -29,6 +29,9 @@ format:
29
29
  show: "{firstName} {lastName}_{company}_{address1}_{address2}_{zip} {city}_{country}_{phone}"
30
30
  format_extended:
31
31
  edit: "{country}_{firstName}{lastName}_{company}_{streetName}{streetNumber}_{address2}_{zip}{city}_{phone}"
32
+ address1_regex:
33
+ - "^(?<streetName>[^\\d,]+?\\.?)[, ]{1,2}(?<streetNumber>\\d+(?: ?[a-z])?)$"
34
+ - "^(?<streetName>[^\\d,]+\\.)(?<streetNumber>\\d+(?: ?[a-z])?)$"
32
35
  additional_address_fields:
33
36
  - name: streetName
34
37
  required: true
@@ -29,6 +29,8 @@ format:
29
29
  show: "{firstName} {lastName}_{company}_{address1}_{address2}_{zip} {city}_{province}_{country}_{phone}"
30
30
  format_extended:
31
31
  edit: "{country}_{firstName}{lastName}_{company}_{streetName}{streetNumber}_{address2}_{zip}{city}{province}_{phone}"
32
+ address1_regex:
33
+ - "^(?<streetName>[^\\d,]+?),? (?<streetNumber>(?:n|n\\.|nº|número|no\\.|no|#)? ?\\d+(?: ?[a-z])?)$"
32
34
  additional_address_fields:
33
35
  - name: streetName
34
36
  required: true
@@ -18,6 +18,9 @@ format:
18
18
  show: "{firstName} {lastName}_{company}_{address1}_{address2}_{zip} {city}_{country}_{phone}"
19
19
  format_extended:
20
20
  edit: "{country}_{firstName}{lastName}_{company}_{streetName}{streetNumber}_{address2}_{zip}{city}_{phone}"
21
+ address1_regex:
22
+ - "^(?<streetName>[^\\d,]+),? (?<streetNumber>\\d+(?:\/\\d+)?)$"
23
+ - "^(?<streetNumber>\\d+(?:\/\\d+)?),? (?<streetName>[^\\d,]+)$"
21
24
  additional_address_fields:
22
25
  - name: streetName
23
26
  required: true
@@ -17,6 +17,8 @@ format:
17
17
  show: "{firstName} {lastName}_{company}_{address1}_{address2}_{zip} {city} {province}_{country}_{phone}"
18
18
  format_extended:
19
19
  edit: "{country}_{firstName}{lastName}_{company}_{streetName}{streetNumber}_{line2}{neighborhood}_{zip}{city}{province}_{phone}"
20
+ address1_regex:
21
+ - "^(?<streetName>[^\\d,]+?),? (?<streetNumber>(?:n|n\\.|nº|número|no\\.|no|#)? ?\\d+(?: ?[a-z])?)$"
20
22
  additional_address_fields:
21
23
  - name: streetName
22
24
  required: true
@@ -30,6 +30,8 @@ format:
30
30
  show: "{firstName} {lastName}_{company}_{address1}_{address2}_{zip} {city}_{country}_{phone}"
31
31
  format_extended:
32
32
  edit: "{country}_{firstName}{lastName}_{company}_{streetName}{streetNumber}_{address2}_{zip}{city}_{phone}"
33
+ address1_regex:
34
+ - "^(?<streetName>[^\\d]+) (?<streetNumber>\\d+(?: ?[a-z])?)$"
33
35
  additional_address_fields:
34
36
  - name: streetName
35
37
  required: true
@@ -57,6 +57,7 @@ module Worldwide
57
57
  "Etc/UCT": "UTC",
58
58
  "Etc/Universal": "UTC",
59
59
  "Etc/Zulu": "UTC",
60
+ "Europe/Kiev": "Europe/Kyiv",
60
61
  GB: "Europe/London",
61
62
  "GB-Eire": "Europe/London",
62
63
  "GMT+0": "Etc/GMT",
@@ -137,14 +137,19 @@ module Worldwide
137
137
  number = input.downcase
138
138
 
139
139
  ["ext", "x", ";"].each do |separator|
140
- if number.include?(separator)
141
- m = number.match(Regexp.new("(?<base>[0-9a-z +-]*)\\s*#{separator}\\.?\\s*(?<ext>.*)"))
142
- return [m["base"], m["ext"]] unless m.nil?
143
- end
140
+ next unless number.include?(separator)
141
+
142
+ m = number.match(Regexp.new(
143
+ "(?<base>[0-9a-z +-]*)\\s*#{separator}\\.?\\s*(?<ext>.*)",
144
+ timeout: 1,
145
+ ))
146
+ return [m["base"], m["ext"]] unless m.nil?
144
147
  end
145
148
 
146
149
  # If we get this far, then we have not found an extension, and assume that the full input is just a public number
147
150
  [input, nil]
151
+ rescue Regexp::TimeoutError
152
+ [input, nil]
148
153
  end
149
154
 
150
155
  # Convert exotic characters to ASCII
@@ -36,6 +36,7 @@ module Worldwide
36
36
  :zip_requirement,
37
37
  :additional_address_fields,
38
38
  :combined_address_format,
39
+ :address1_regex,
39
40
  ]
40
41
 
41
42
  # A region may have more than one parent.
@@ -208,6 +209,9 @@ module Worldwide
208
209
  # A hash of the rules for concatening the additional address fields into the standard fields
209
210
  attr_accessor :combined_address_format
210
211
 
212
+ # An array of regex patterns of the address1 field, capturing the supported additional address fields
213
+ attr_accessor :address1_regex
214
+
211
215
  def initialize(
212
216
  alpha_three: nil,
213
217
  continent: false,
@@ -245,6 +249,7 @@ module Worldwide
245
249
 
246
250
  @additional_address_fields = []
247
251
  @combined_address_format = {}
252
+ @address1_regex = []
248
253
  @building_number_required = false
249
254
  @building_number_may_be_in_address2 = false
250
255
  @currency = nil
@@ -97,6 +97,7 @@ module Worldwide
97
97
  def apply_territory_attributes(region, spec)
98
98
  region.additional_address_fields = spec["additional_address_fields"] || []
99
99
  region.combined_address_format = spec["combined_address_format"] || {}
100
+ region.address1_regex = spec["address1_regex"] || []
100
101
  region.building_number_required = spec["building_number_required"] || false
101
102
  region.building_number_may_be_in_address2 = spec["building_number_may_be_in_address2"] || false
102
103
  currency_code = spec["currency"]
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Worldwide
4
- VERSION = "1.10.0"
4
+ VERSION = "1.11.1"
5
5
  end
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: 1.10.0
4
+ version: 1.11.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shopify
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-09-16 00:00:00.000000000 Z
11
+ date: 2024-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -8505,7 +8505,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
8505
8505
  - !ruby/object:Gem::Version
8506
8506
  version: '0'
8507
8507
  requirements: []
8508
- rubygems_version: 3.5.18
8508
+ rubygems_version: 3.5.21
8509
8509
  signing_key:
8510
8510
  specification_version: 4
8511
8511
  summary: Internationalization and localization APIs