phonelib 0.4.6 → 0.4.7
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/libphonenumber/README.md +1 -1
- data/data/libphonenumber/cpp/src/phonenumbers/lite_metadata.cc +9342 -9356
- data/data/libphonenumber/cpp/src/phonenumbers/metadata.cc +9917 -9931
- data/data/libphonenumber/cpp/src/phonenumbers/phonenumberutil.cc +3 -3
- data/data/libphonenumber/cpp/src/phonenumbers/short_metadata.cc +2366 -2365
- data/data/libphonenumber/java/carrier/pom.xml +4 -4
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/1246_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/248_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/373_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/60_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/63_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/92_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/94_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/95_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/960_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/972_en +0 -0
- data/data/libphonenumber/java/demo/pom.xml +5 -5
- data/data/libphonenumber/java/geocoder/pom.xml +4 -4
- data/data/libphonenumber/java/internal/prefixmapper/pom.xml +3 -3
- data/data/libphonenumber/java/libphonenumber/pom.xml +2 -2
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java +2 -3
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JO +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LK +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LU +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MD +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PH +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PK +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SC +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BE +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LK +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_US +0 -0
- data/data/libphonenumber/java/pom.xml +1 -1
- data/data/libphonenumber/java/release_notes.txt +8 -0
- data/data/libphonenumber/javascript/i18n/phonenumbers/demo-compiled.js +67 -67
- data/data/libphonenumber/javascript/i18n/phonenumbers/metadata.js +25 -25
- data/data/libphonenumber/javascript/i18n/phonenumbers/metadatalite.js +25 -25
- data/data/libphonenumber/resources/PhoneNumberMetadata.xml +67 -80
- data/data/libphonenumber/resources/ShortNumberMetadata.xml +6 -4
- data/data/libphonenumber/resources/carrier/en/1.txt +1 -0
- data/data/libphonenumber/resources/carrier/en/248.txt +2 -0
- data/data/libphonenumber/resources/carrier/en/373.txt +0 -1
- data/data/libphonenumber/resources/carrier/en/60.txt +189 -43
- data/data/libphonenumber/resources/carrier/en/63.txt +2 -0
- data/data/libphonenumber/resources/carrier/en/92.txt +1 -0
- data/data/libphonenumber/resources/carrier/en/94.txt +3 -0
- data/data/libphonenumber/resources/carrier/en/95.txt +1 -0
- data/data/libphonenumber/resources/carrier/en/960.txt +1 -1
- data/data/libphonenumber/resources/carrier/en/972.txt +1 -0
- data/data/phone_data.dat +0 -0
- data/lib/phonelib/core.rb +12 -2
- data/lib/phonelib/data_importer.rb +46 -0
- data/lib/phonelib/phone_analyzer.rb +45 -33
- data/lib/phonelib/version.rb +1 -1
- metadata +2 -2
|
@@ -4,6 +4,11 @@ module Phonelib
|
|
|
4
4
|
# array of types not included for validation check in cycle
|
|
5
5
|
NOT_FOR_CHECK = [:general_desc, :fixed_line, :mobile, :fixed_or_mobile]
|
|
6
6
|
|
|
7
|
+
# caches regular expression, reusing it for later lookups
|
|
8
|
+
def cr(regexp)
|
|
9
|
+
Phonelib.phone_regexp_cache[regexp] ||= Regexp.new(regexp)
|
|
10
|
+
end
|
|
11
|
+
|
|
7
12
|
# parses provided phone if it is valid for country data and returns result of
|
|
8
13
|
# analyze
|
|
9
14
|
#
|
|
@@ -34,17 +39,18 @@ module Phonelib
|
|
|
34
39
|
# * +phone+ - phone for parsing
|
|
35
40
|
# * +country+ - country to parse phone with
|
|
36
41
|
def try_to_parse_single_country(phone, country)
|
|
37
|
-
|
|
42
|
+
data = Phonelib.phone_data[country]
|
|
43
|
+
if country && data
|
|
38
44
|
# if country was provided and it's a valid country, trying to
|
|
39
45
|
# create e164 representation of phone number,
|
|
40
46
|
# kind of normalization for parsing
|
|
41
|
-
e164 = convert_to_e164 phone,
|
|
47
|
+
e164 = convert_to_e164 phone, data
|
|
42
48
|
# if phone starts with international prefix of provided
|
|
43
49
|
# country try to reanalyze without international prefix for
|
|
44
50
|
# all countries
|
|
45
51
|
return analyze(e164.gsub('+', ''), nil) if e164[0] == '+'
|
|
46
52
|
# trying to parse number for provided country
|
|
47
|
-
parse_single_country e164,
|
|
53
|
+
parse_single_country e164, data
|
|
48
54
|
end
|
|
49
55
|
end
|
|
50
56
|
|
|
@@ -55,8 +61,13 @@ module Phonelib
|
|
|
55
61
|
# * +e164+ - e164 representation of phone for parsing
|
|
56
62
|
# * +data+ - country data for single country for parsing
|
|
57
63
|
def parse_single_country(e164, data)
|
|
58
|
-
|
|
59
|
-
|
|
64
|
+
valid_match = phone_match_data?(e164, data)
|
|
65
|
+
if valid_match
|
|
66
|
+
get_national_and_data(e164, data, valid_match)
|
|
67
|
+
else
|
|
68
|
+
possible_match = phone_match_data?(e164, data, true)
|
|
69
|
+
possible_match && get_national_and_data(e164, data, possible_match)
|
|
70
|
+
end
|
|
60
71
|
end
|
|
61
72
|
|
|
62
73
|
# method tries to detect what is the country for provided phone
|
|
@@ -90,12 +101,15 @@ module Phonelib
|
|
|
90
101
|
# * +phone+ - phone number for parsing
|
|
91
102
|
# * +data+ - country data to be based on for creating e164 representation
|
|
92
103
|
def convert_to_e164(phone, data)
|
|
93
|
-
match = phone.match
|
|
94
|
-
|
|
104
|
+
match = phone.match full_regex_for_data(data, Core::VALID_PATTERN)
|
|
105
|
+
case
|
|
106
|
+
when match
|
|
95
107
|
national_start = (1..3).map { |i| match[i].to_s.length }.inject(:+)
|
|
96
108
|
"#{data[Core::COUNTRY_CODE]}#{phone[national_start..-1]}"
|
|
109
|
+
when phone.match(cr("^#{data[Core::INTERNATIONAL_PREFIX]}"))
|
|
110
|
+
phone.sub(cr("^#{data[Core::INTERNATIONAL_PREFIX]}"), '+')
|
|
97
111
|
else
|
|
98
|
-
|
|
112
|
+
"#{data[Core::COUNTRY_CODE]}#{phone}"
|
|
99
113
|
end
|
|
100
114
|
end
|
|
101
115
|
|
|
@@ -106,7 +120,7 @@ module Phonelib
|
|
|
106
120
|
#
|
|
107
121
|
# * +data+ - country data hash
|
|
108
122
|
# * +country_optional+ - whether to put country code as optional group
|
|
109
|
-
def
|
|
123
|
+
def full_regex_for_data(data, type, country_optional = true)
|
|
110
124
|
regex = []
|
|
111
125
|
regex << "(#{data[Core::INTERNATIONAL_PREFIX]})?"
|
|
112
126
|
regex << if country_optional
|
|
@@ -114,10 +128,10 @@ module Phonelib
|
|
|
114
128
|
else
|
|
115
129
|
data[Core::COUNTRY_CODE]
|
|
116
130
|
end
|
|
117
|
-
regex << "(#{data[Core::NATIONAL_PREFIX]})?"
|
|
118
|
-
regex << "(#{data[Core::TYPES][Core::GENERAL][
|
|
131
|
+
regex << "(#{data[Core::NATIONAL_PREFIX_FOR_PARSING] || data[Core::NATIONAL_PREFIX]})?"
|
|
132
|
+
regex << "(#{data[Core::TYPES][Core::GENERAL][type]})"
|
|
119
133
|
|
|
120
|
-
|
|
134
|
+
cr("^#{regex.join}$")
|
|
121
135
|
end
|
|
122
136
|
|
|
123
137
|
# returns national number and analyzing results for provided phone number
|
|
@@ -130,7 +144,7 @@ module Phonelib
|
|
|
130
144
|
def get_national_and_data(phone, data, country_match)
|
|
131
145
|
prefix_length = data[Core::COUNTRY_CODE].length
|
|
132
146
|
prefix_length += [1, 2].map { |i| country_match[i].to_s.size }.inject(:+)
|
|
133
|
-
result = data.select { |k, v|
|
|
147
|
+
result = data.select { |k, v| k != :types && k != :formats }
|
|
134
148
|
result[:national] = phone[prefix_length..-1]
|
|
135
149
|
result[:format] = get_number_format(result[:national],
|
|
136
150
|
data[Core::FORMATS])
|
|
@@ -144,12 +158,13 @@ module Phonelib
|
|
|
144
158
|
#
|
|
145
159
|
# * +phone+ - phone number for parsing
|
|
146
160
|
# * +data+ - country data
|
|
147
|
-
def phone_match_data?(phone, data)
|
|
161
|
+
def phone_match_data?(phone, data, possible = false)
|
|
148
162
|
country_code = "#{data[Core::COUNTRY_CODE]}"
|
|
149
163
|
inter_prefix = "(#{data[Core::INTERNATIONAL_PREFIX]})?"
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
164
|
+
return unless phone.match cr("^#{inter_prefix}#{country_code}")
|
|
165
|
+
|
|
166
|
+
type = possible ? Core::POSSIBLE_PATTERN : Core::VALID_PATTERN
|
|
167
|
+
phone.match full_regex_for_data(data, type, false)
|
|
153
168
|
end
|
|
154
169
|
|
|
155
170
|
# Returns all valid and possible phone number types for currently parsed
|
|
@@ -193,8 +208,8 @@ module Phonelib
|
|
|
193
208
|
def get_number_format(national, format_data)
|
|
194
209
|
format_data && format_data.find do |format|
|
|
195
210
|
(format[Core::LEADING_DIGITS].nil? \
|
|
196
|
-
||
|
|
197
|
-
&&
|
|
211
|
+
|| national.match(cr("^(#{format[Core::LEADING_DIGITS]})"))) \
|
|
212
|
+
&& national.match(cr("^(#{format[Core::PATTERN]})$"))
|
|
198
213
|
end || Core::DEFAULT_NUMBER_FORMAT
|
|
199
214
|
end
|
|
200
215
|
|
|
@@ -219,17 +234,14 @@ module Phonelib
|
|
|
219
234
|
# * +all_patterns+ - hash of all patterns for validation
|
|
220
235
|
# * +type+ - type of phone to get patterns for
|
|
221
236
|
def get_patterns(all_patterns, type)
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
all_patterns[Core::FIXED_LINE]
|
|
225
|
-
else
|
|
226
|
-
all_patterns[type]
|
|
227
|
-
end
|
|
228
|
-
return [nil, nil] if patterns.nil?
|
|
229
|
-
national_pattern = patterns[Core::VALID_PATTERN]
|
|
230
|
-
possible_pattern = patterns[Core::POSSIBLE_PATTERN] || national_pattern
|
|
237
|
+
type = Core::FIXED_LINE if type == Core::FIXED_OR_MOBILE
|
|
238
|
+
patterns = all_patterns[type]
|
|
231
239
|
|
|
232
|
-
|
|
240
|
+
if patterns.nil?
|
|
241
|
+
[nil, nil]
|
|
242
|
+
else
|
|
243
|
+
[patterns[Core::POSSIBLE_PATTERN], patterns[Core::VALID_PATTERN]]
|
|
244
|
+
end
|
|
233
245
|
end
|
|
234
246
|
|
|
235
247
|
# Checks if passed number matches valid and possible patterns
|
|
@@ -240,15 +252,15 @@ module Phonelib
|
|
|
240
252
|
# * +possible_pattern+ - possible pattern for validation
|
|
241
253
|
# * +national_pattern+ - valid pattern for validation
|
|
242
254
|
def number_valid_and_possible?(number, possible_pattern, national_pattern)
|
|
243
|
-
possible_match = number.match(
|
|
255
|
+
possible_match = number.match(cr("^(?:#{possible_pattern})$"))
|
|
244
256
|
possible = possible_match && possible_match.to_s.length == number.length
|
|
245
257
|
|
|
258
|
+
return [possible, possible] if possible_pattern == national_pattern
|
|
259
|
+
valid = false
|
|
246
260
|
if possible
|
|
247
261
|
# doing national pattern match only in case possible matches
|
|
248
|
-
national_match = number.match(
|
|
262
|
+
national_match = number.match(cr("^(?:#{national_pattern})$"))
|
|
249
263
|
valid = national_match && national_match.to_s.length == number.length
|
|
250
|
-
else
|
|
251
|
-
valid = false
|
|
252
264
|
end
|
|
253
265
|
|
|
254
266
|
[valid && possible, possible]
|
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.
|
|
4
|
+
version: 0.4.7
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Vadim Senderovich
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-
|
|
11
|
+
date: 2015-06-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake
|