phonelib 0.7.6 → 0.8.0
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/data/extended_data.dat +0 -0
- data/data/phone_data.dat +0 -0
- data/lib/phonelib/core.rb +11 -1
- data/lib/phonelib/phone.rb +2 -0
- data/lib/phonelib/phone_analyzer.rb +11 -4
- data/lib/phonelib/version.rb +1 -1
- metadata +30 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bdcde83b646a76dd337ecbb6e7ca8976a23729936d34a0b2734ac6dc76d758e0
|
4
|
+
data.tar.gz: 5f0ef67a10c99e563f52885860e41aefa08c67df4d3593fc9fe515c1479ebc6b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f27ccd04e753eb2349af42ea19710fec3c4d97975e477a380651f51c6d2c47202b5e029f93807659df33aac6cf3817ffda7fc6eeeceb81e02132b6d1d6294f1f
|
7
|
+
data.tar.gz: 3c2049c708d6e938cbbc3459a3bec1ad20a409b797cd4a399586705231e0321a897a9ebe19fd1cfd7e13be9cae22515b08390a323262cb0015a591186632e845
|
data/data/extended_data.dat
CHANGED
Binary file
|
data/data/phone_data.dat
CHANGED
Binary file
|
data/lib/phonelib/core.rb
CHANGED
@@ -10,6 +10,16 @@ module Phonelib
|
|
10
10
|
@@phone_data ||= load_data.freeze
|
11
11
|
end
|
12
12
|
|
13
|
+
# @private getter for phone data indexed by country code (internal use only)
|
14
|
+
def data_by_country_codes
|
15
|
+
@@data_by_country_codes ||= phone_data.each_value.group_by { |d| d[COUNTRY_CODE] }.freeze
|
16
|
+
end
|
17
|
+
|
18
|
+
# @private getter for all international prefixes in phone_data
|
19
|
+
def phone_data_int_prefixes
|
20
|
+
@@all_int_prefixes ||= phone_data.map {|k,v| v[:international_prefix] }.select { |v| v != '' }.compact.uniq.join('|').freeze
|
21
|
+
end
|
22
|
+
|
13
23
|
# @private used to cache frequently-used regular expressions
|
14
24
|
@@phone_regexp_cache = {}
|
15
25
|
|
@@ -179,7 +189,7 @@ module Phonelib
|
|
179
189
|
def add_additional_regex(country, type, national_regex)
|
180
190
|
return unless Phonelib::Core::TYPES_DESC.keys.include?(type.to_sym)
|
181
191
|
return unless national_regex.is_a?(String)
|
182
|
-
@@phone_data = nil
|
192
|
+
@@phone_data = @@data_by_country_codes = nil
|
183
193
|
@@additional_regexes[country.to_s.upcase] ||= {}
|
184
194
|
@@additional_regexes[country.to_s.upcase][type] ||= []
|
185
195
|
@@additional_regexes[country.to_s.upcase][type] << national_regex
|
data/lib/phonelib/phone.rb
CHANGED
@@ -178,6 +178,8 @@ module Phonelib
|
|
178
178
|
|
179
179
|
# @private extracts extension from passed phone number if provided
|
180
180
|
def separate_extension(original)
|
181
|
+
return [original, ''] unless Phonelib.extension_separate_symbols
|
182
|
+
|
181
183
|
regex = if Phonelib.extension_separate_symbols.is_a?(Array)
|
182
184
|
cr("#{Phonelib.extension_separate_symbols.join('|')}")
|
183
185
|
else
|
@@ -124,15 +124,22 @@ module Phonelib
|
|
124
124
|
#
|
125
125
|
# * +phone+ - phone number for parsing
|
126
126
|
def detect_and_parse(phone, country)
|
127
|
-
|
128
|
-
|
127
|
+
countries_data = country_code_candidates_for(phone).flat_map { |code|
|
128
|
+
Phonelib.data_by_country_codes[code] || []
|
129
|
+
}
|
130
|
+
countries_data.each_with_object({}) do |data, result|
|
131
|
+
key = data[:id]
|
129
132
|
parsed = parse_single_country(phone, data)
|
130
133
|
if (!Phonelib.strict_double_prefix_check || key == country) && double_prefix_allowed?(data, phone, parsed && parsed[key])
|
131
134
|
parsed = parse_single_country(changed_dp_phone(key, phone), data)
|
132
135
|
end
|
133
136
|
result.merge!(parsed) unless parsed.nil?
|
134
|
-
end
|
135
|
-
|
137
|
+
end.compact
|
138
|
+
end
|
139
|
+
|
140
|
+
def country_code_candidates_for(phone)
|
141
|
+
stripped_phone = phone.gsub(/^(#{Phonelib.phone_data_int_prefixes})/, '')
|
142
|
+
((1..3).map { |length| phone[0, length] } + (1..3).map { |length| stripped_phone[0, length] }).uniq
|
136
143
|
end
|
137
144
|
|
138
145
|
# Create phone representation in e164 format
|
data/lib/phonelib/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phonelib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vadim Senderovich
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-04-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -94,6 +94,34 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: benchmark-ips
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: benchmark-memory
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
97
125
|
- !ruby/object:Gem::Dependency
|
98
126
|
name: rack-cache
|
99
127
|
requirement: !ruby/object:Gem::Requirement
|