phonelib 0.5.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.rdoc +9 -3
- data/data/extended_data.dat +0 -0
- data/data/libphonenumber/README.md +1 -1
- data/data/libphonenumber/cpp/src/phonenumbers/lite_metadata.cc +6313 -6305
- data/data/libphonenumber/cpp/src/phonenumbers/metadata.cc +5989 -5980
- data/data/libphonenumber/cpp/src/phonenumbers/short_metadata.cc +2063 -1977
- data/data/libphonenumber/java/build.xml +30 -0
- data/data/libphonenumber/java/carrier/pom.xml +4 -4
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/227_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/231_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/252_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/254_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/255_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/40_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/509_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/91_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/95_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/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1854_en +0 -0
- data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/264_en +0 -0
- data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/config +0 -0
- data/data/libphonenumber/java/internal/prefixmapper/pom.xml +3 -3
- data/data/libphonenumber/java/libphonenumber/pom.xml +16 -2
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/ShortNumbersRegionCodeSet.java +8 -2
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/SingleFileMetadataSourceImpl.java +98 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LR +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_MR +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NA +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NE +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PT +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RO +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TZ +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CD +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CF +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CG +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ER +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KP +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NE +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NO +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PT +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SO +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/SingleFilePhoneNumberMetadataProto +0 -0
- data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/SingleFilePhoneNumberMetadataProtoForTesting +0 -0
- data/data/libphonenumber/java/pom.xml +1 -1
- data/data/libphonenumber/java/release_notes.txt +12 -0
- data/data/libphonenumber/javascript/README.md +86 -0
- data/data/libphonenumber/javascript/i18n/phonenumbers/demo-compiled.js +73 -73
- data/data/libphonenumber/javascript/i18n/phonenumbers/metadata.js +29 -29
- data/data/libphonenumber/javascript/i18n/phonenumbers/metadatalite.js +29 -29
- data/data/libphonenumber/resources/PhoneNumberMetadata.xml +86 -66
- data/data/libphonenumber/resources/ShortNumberMetadata.xml +276 -24
- data/data/libphonenumber/resources/carrier/en/227.txt +1 -0
- data/data/libphonenumber/resources/carrier/en/231.txt +3 -0
- data/data/libphonenumber/resources/carrier/en/252.txt +3 -0
- data/data/libphonenumber/resources/carrier/en/254.txt +3 -0
- data/data/libphonenumber/resources/carrier/en/255.txt +6 -0
- data/data/libphonenumber/resources/carrier/en/40.txt +1 -0
- data/data/libphonenumber/resources/carrier/en/509.txt +5 -5
- data/data/libphonenumber/resources/carrier/en/880.txt +1 -1
- data/data/libphonenumber/resources/carrier/en/91.txt +37 -4
- data/data/libphonenumber/resources/carrier/en/95.txt +29 -0
- data/data/libphonenumber/resources/geocoding/en/1.txt +1 -0
- data/data/libphonenumber/resources/geocoding/en/264.txt +1 -0
- data/data/libphonenumber/tools/java/cpp-build/target/cpp-build-1.0-SNAPSHOT-jar-with-dependencies.jar +0 -0
- data/data/libphonenumber/tools/java/java-build/src/com/google/i18n/phonenumbers/BuildMetadataProtoFromXml.java +32 -14
- data/data/libphonenumber/tools/java/java-build/target/java-build-1.0-SNAPSHOT-jar-with-dependencies.jar +0 -0
- data/data/phone_data.dat +0 -0
- data/lib/phonelib/core.rb +15 -0
- data/lib/phonelib/data_importer.rb +12 -0
- data/lib/phonelib/phone_analyzer.rb +6 -109
- data/lib/phonelib/phone_analyzer_helper.rb +128 -0
- data/lib/phonelib/version.rb +1 -1
- data/lib/phonelib.rb +1 -0
- metadata +28 -3
- data/data/libphonenumber/javascript/README +0 -101
@@ -153,8 +153,34 @@
|
|
153
153
|
917241|Idea
|
154
154
|
917247|Idea
|
155
155
|
917248|Idea
|
156
|
-
|
157
|
-
|
156
|
+
9172490|Telewings
|
157
|
+
9172491|Telewings
|
158
|
+
9172492|Telewings
|
159
|
+
9172493|Telewings
|
160
|
+
9172494|Telewings
|
161
|
+
9172495|Telewings
|
162
|
+
9172496|Telewings
|
163
|
+
9172498|Telewings
|
164
|
+
9172499|Vodafone
|
165
|
+
917250|Airtel
|
166
|
+
917251|Vodafone
|
167
|
+
917252|Vodafone
|
168
|
+
917253|Vodafone
|
169
|
+
917254|Idea
|
170
|
+
917255|Idea
|
171
|
+
917256|Idea
|
172
|
+
9172570|Idea
|
173
|
+
9172578|Airtel
|
174
|
+
9172579|Airtel
|
175
|
+
917258|Airtel
|
176
|
+
917259|Airtel
|
177
|
+
917260|Airtel
|
178
|
+
9172610|Airtel
|
179
|
+
9172618|Airtel
|
180
|
+
9172619|Vodafone
|
181
|
+
917262|Vodafone
|
182
|
+
917263|Vodafone
|
183
|
+
917264|Vodafone
|
158
184
|
917265|Idea
|
159
185
|
917266|Telewings
|
160
186
|
917267|Telewings
|
@@ -1138,6 +1164,9 @@
|
|
1138
1164
|
918521|AirTel
|
1139
1165
|
918522|Telewings
|
1140
1166
|
918523|Telewings
|
1167
|
+
9185239|Vodafone
|
1168
|
+
918524|Vodafone
|
1169
|
+
918525|Vodafone
|
1141
1170
|
918526|Aircel
|
1142
1171
|
918527|AirTel
|
1143
1172
|
918528|Videocon
|
@@ -1413,6 +1442,10 @@
|
|
1413
1442
|
918827|AirTel
|
1414
1443
|
9188280|Airtel
|
1415
1444
|
9188285|Idea
|
1445
|
+
9188286|Idea
|
1446
|
+
9188287|Idea
|
1447
|
+
9188288|Idea
|
1448
|
+
9188289|Idea
|
1416
1449
|
918829|Tata Docomo
|
1417
1450
|
918852|Tata Docomo
|
1418
1451
|
918853|AirTel
|
@@ -1650,7 +1683,7 @@
|
|
1650
1683
|
919103|Reliance
|
1651
1684
|
919104|Telewings
|
1652
1685
|
919105|Loop Mobile
|
1653
|
-
919106|
|
1686
|
+
919106|Tata Docomo
|
1654
1687
|
919107|Loop Mobile
|
1655
1688
|
919108|Airtel
|
1656
1689
|
919109|Loop Mobile
|
@@ -2058,7 +2091,7 @@
|
|
2058
2091
|
919512|Vodafone
|
2059
2092
|
919513|ETISALAT
|
2060
2093
|
919514|ETISALAT
|
2061
|
-
919515|
|
2094
|
+
919515|Airtel
|
2062
2095
|
919516|Etisalat DB(cheers)
|
2063
2096
|
919517|ETISALAT
|
2064
2097
|
919518|ETISALAT
|
@@ -12,6 +12,35 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
+
959250|Huawei
|
16
|
+
959251|Huawei
|
17
|
+
959252|Huawei
|
18
|
+
959253|Huawei
|
19
|
+
959254|Huawei
|
20
|
+
9592557|ASB
|
21
|
+
9592558|ASB
|
22
|
+
9592559|ASB
|
23
|
+
959256|ZTE
|
24
|
+
959257|ZTE
|
25
|
+
959258|ZTE
|
26
|
+
959259|ZTE
|
27
|
+
959260|Huawei
|
28
|
+
959261|Huawei
|
29
|
+
959262|Huawei
|
30
|
+
959263|Huawei
|
31
|
+
959264|Huawei
|
32
|
+
959265|ZTE
|
33
|
+
95930|MECTel
|
34
|
+
95931|MECTel
|
35
|
+
95932|MECTel
|
36
|
+
95933|MECTel
|
37
|
+
95936|MECTel
|
38
|
+
959426|ZTE
|
39
|
+
959427|ZTE
|
40
|
+
95951|ZTE
|
41
|
+
95955|ZTE
|
42
|
+
95977|Telenor
|
15
43
|
95978|Telenor
|
16
44
|
95979|Telenor
|
45
|
+
95996|Ooredoo
|
17
46
|
95997|Ooredoo
|
@@ -30181,6 +30181,7 @@
|
|
30181
30181
|
1850983|Milton, FL
|
30182
30182
|
1850994|Milton, FL
|
30183
30183
|
1850997|Monticello, FL
|
30184
|
+
1854|Ohio
|
30184
30185
|
1856|New Jersey
|
30185
30186
|
1856205|Vineland, NJ
|
30186
30187
|
1856216|Cherry Hill, NJ
|
Binary file
|
@@ -53,6 +53,7 @@ public class BuildMetadataProtoFromXml extends Command {
|
|
53
53
|
private static final String DATA_PREFIX = "data-prefix";
|
54
54
|
private static final String MAPPING_CLASS = "mapping-class";
|
55
55
|
private static final String COPYRIGHT = "copyright";
|
56
|
+
private static final String SINGLE_FILE = "single-file";
|
56
57
|
private static final String LITE_BUILD = "lite-build";
|
57
58
|
|
58
59
|
private static final String HELP_MESSAGE =
|
@@ -62,12 +63,17 @@ public class BuildMetadataProtoFromXml extends Command {
|
|
62
63
|
" --" + OUTPUT_DIR + "=PATH Use PATH as the root directory for output files.\n" +
|
63
64
|
" --" + DATA_PREFIX +
|
64
65
|
"=PATH Use PATH (relative to " + OUTPUT_DIR + ") as the basename when\n" +
|
65
|
-
" writing phone number metadata
|
66
|
-
"
|
66
|
+
" writing phone number metadata in proto format.\n" +
|
67
|
+
" One file per region will be written unless " + SINGLE_FILE + "\n" +
|
68
|
+
" is set, in which case a single file will be written with\n" +
|
69
|
+
" metadata for all regions.\n" +
|
67
70
|
" --" + MAPPING_CLASS + "=NAME Store country code mappings in the class NAME, which\n" +
|
68
71
|
" will be written to a file in " + OUTPUT_DIR + ".\n" +
|
69
72
|
" --" + COPYRIGHT + "=YEAR Use YEAR in generated copyright headers.\n" +
|
70
73
|
"\n" +
|
74
|
+
" [--" + SINGLE_FILE + "=<true|false>] Optional (default: false). Whether to write\n" +
|
75
|
+
" metadata to a single file, instead of one file\n" +
|
76
|
+
" per region.\n" +
|
71
77
|
" [--" + LITE_BUILD + "=<true|false>] Optional (default: false). In a lite build,\n" +
|
72
78
|
" certain metadata will be omitted. At this\n" +
|
73
79
|
" moment, example numbers information is omitted.\n" +
|
@@ -79,6 +85,7 @@ public class BuildMetadataProtoFromXml extends Command {
|
|
79
85
|
" --" + DATA_PREFIX + "=data/PhoneNumberMetadataProto \\\n" +
|
80
86
|
" --" + MAPPING_CLASS + "=CountryCodeToRegionCodeMap \\\n" +
|
81
87
|
" --" + COPYRIGHT + "=2010 \\\n" +
|
88
|
+
" --" + SINGLE_FILE + "=false \\\n" +
|
82
89
|
" --" + LITE_BUILD + "=false\n";
|
83
90
|
|
84
91
|
private static final String GENERATION_COMMENT =
|
@@ -101,6 +108,7 @@ public class BuildMetadataProtoFromXml extends Command {
|
|
101
108
|
String dataPrefix = null;
|
102
109
|
String mappingClass = null;
|
103
110
|
String copyright = null;
|
111
|
+
boolean singleFile = false;
|
104
112
|
boolean liteBuild = false;
|
105
113
|
|
106
114
|
for (int i = 1; i < getArgs().length; i++) {
|
@@ -122,6 +130,9 @@ public class BuildMetadataProtoFromXml extends Command {
|
|
122
130
|
mappingClass = value;
|
123
131
|
} else if (COPYRIGHT.equals(key)) {
|
124
132
|
copyright = value;
|
133
|
+
} else if (SINGLE_FILE.equals(key) &&
|
134
|
+
("true".equalsIgnoreCase(value) || "false".equalsIgnoreCase(value))) {
|
135
|
+
singleFile = "true".equalsIgnoreCase(value);
|
125
136
|
} else if (LITE_BUILD.equals(key) &&
|
126
137
|
("true".equalsIgnoreCase(value) || "false".equalsIgnoreCase(value))) {
|
127
138
|
liteBuild = "true".equalsIgnoreCase(value);
|
@@ -147,19 +158,26 @@ public class BuildMetadataProtoFromXml extends Command {
|
|
147
158
|
PhoneMetadataCollection metadataCollection =
|
148
159
|
BuildMetadataFromXml.buildPhoneMetadataCollection(inputFile, liteBuild);
|
149
160
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
if (regionCode.equals("001") || regionCode.isEmpty()) {
|
155
|
-
regionCode = Integer.toString(metadata.getCountryCode());
|
156
|
-
}
|
157
|
-
PhoneMetadataCollection outMetadataCollection = new PhoneMetadataCollection();
|
158
|
-
outMetadataCollection.addMetadata(metadata);
|
159
|
-
FileOutputStream outputForRegion = new FileOutputStream(filePrefix + "_" + regionCode);
|
160
|
-
ObjectOutputStream out = new ObjectOutputStream(outputForRegion);
|
161
|
-
outMetadataCollection.writeExternal(out);
|
161
|
+
if (singleFile) {
|
162
|
+
FileOutputStream output = new FileOutputStream(filePrefix);
|
163
|
+
ObjectOutputStream out = new ObjectOutputStream(output);
|
164
|
+
metadataCollection.writeExternal(out);
|
162
165
|
out.close();
|
166
|
+
} else {
|
167
|
+
for (PhoneMetadata metadata : metadataCollection.getMetadataList()) {
|
168
|
+
String regionCode = metadata.getId();
|
169
|
+
// For non-geographical country calling codes (e.g. +800), or for alternate formats, use the
|
170
|
+
// country calling codes instead of the region code to form the file name.
|
171
|
+
if (regionCode.equals("001") || regionCode.isEmpty()) {
|
172
|
+
regionCode = Integer.toString(metadata.getCountryCode());
|
173
|
+
}
|
174
|
+
PhoneMetadataCollection outMetadataCollection = new PhoneMetadataCollection();
|
175
|
+
outMetadataCollection.addMetadata(metadata);
|
176
|
+
FileOutputStream outputForRegion = new FileOutputStream(filePrefix + "_" + regionCode);
|
177
|
+
ObjectOutputStream out = new ObjectOutputStream(outputForRegion);
|
178
|
+
outMetadataCollection.writeExternal(out);
|
179
|
+
out.close();
|
180
|
+
}
|
163
181
|
}
|
164
182
|
|
165
183
|
Map<Integer, List<String>> countryCodeToRegionCodeMap =
|
Binary file
|
data/data/phone_data.dat
CHANGED
Binary file
|
data/lib/phonelib/core.rb
CHANGED
@@ -38,6 +38,19 @@ module Phonelib
|
|
38
38
|
@@default_country = country
|
39
39
|
end
|
40
40
|
|
41
|
+
# flag identifies whether to use special phone types, like short code
|
42
|
+
@@parse_special = false
|
43
|
+
|
44
|
+
# getter for flag for special phone types parsing
|
45
|
+
def parse_special
|
46
|
+
@@parse_special
|
47
|
+
end
|
48
|
+
|
49
|
+
# setter for flag for special phone types parsing
|
50
|
+
def parse_special=(special)
|
51
|
+
@@parse_special = special
|
52
|
+
end
|
53
|
+
|
41
54
|
# gem constants definition
|
42
55
|
|
43
56
|
# Main data file
|
@@ -118,6 +131,8 @@ module Phonelib
|
|
118
131
|
INTERNATIONAL_PREFIX = :international_prefix
|
119
132
|
# Main country for code key
|
120
133
|
MAIN_COUNTRY_FOR_CODE = :main_country_for_code
|
134
|
+
# Double country prefix flag key
|
135
|
+
DOUBLE_COUNTRY_PREFIX_FLAG = :double_prefix
|
121
136
|
# Types key
|
122
137
|
TYPES = :types
|
123
138
|
# Formats key
|
@@ -17,6 +17,9 @@ module Phonelib
|
|
17
17
|
class Importer
|
18
18
|
include Phonelib::DataImporterHelper
|
19
19
|
|
20
|
+
# countries that can have double country prefix in number
|
21
|
+
DOUBLE_COUNTRY_CODES_COUNTRIES = %w(IN DE BR)
|
22
|
+
|
20
23
|
# main data file in repo
|
21
24
|
MAIN_FILE = 'resources/PhoneNumberMetadata.xml'
|
22
25
|
# short number metadata
|
@@ -93,6 +96,7 @@ module Phonelib
|
|
93
96
|
country[:types] = {}
|
94
97
|
|
95
98
|
country.merge! get_types_and_formats(el.children)
|
99
|
+
country = add_double_country_flag country
|
96
100
|
@data[country[:id]] = country
|
97
101
|
end
|
98
102
|
end
|
@@ -158,6 +162,14 @@ module Phonelib
|
|
158
162
|
:c)
|
159
163
|
end
|
160
164
|
|
165
|
+
# adds double country code flag in case country allows
|
166
|
+
def add_double_country_flag(country)
|
167
|
+
if DOUBLE_COUNTRY_CODES_COUNTRIES.include?(country[:id])
|
168
|
+
country[:double_prefix] = true
|
169
|
+
end
|
170
|
+
country
|
171
|
+
end
|
172
|
+
|
161
173
|
# method extracts formats and types from xml data
|
162
174
|
def get_types_and_formats(children)
|
163
175
|
types = {}
|
@@ -1,14 +1,12 @@
|
|
1
1
|
module Phonelib
|
2
2
|
# phone analyzing methods module
|
3
3
|
module PhoneAnalyzer
|
4
|
+
# extending with helper methods for analyze
|
5
|
+
include Phonelib::PhoneAnalyzerHelper
|
6
|
+
|
4
7
|
# array of types not included for validation check in cycle
|
5
8
|
NOT_FOR_CHECK = [:general_desc, :fixed_line, :mobile, :fixed_or_mobile]
|
6
9
|
|
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
|
-
|
12
10
|
# parses provided phone if it is valid for country data and returns result of
|
13
11
|
# analyze
|
14
12
|
#
|
@@ -79,21 +77,14 @@ module Phonelib
|
|
79
77
|
result = {}
|
80
78
|
Phonelib.phone_data.each do |key, data|
|
81
79
|
parsed = parse_single_country(phone, data)
|
80
|
+
if allows_double_prefix(data, phone, parsed && parsed[key])
|
81
|
+
parsed = parse_single_country("#{data[:country_code]}#{phone}", data)
|
82
|
+
end
|
82
83
|
result.merge!(parsed) unless parsed.nil?
|
83
84
|
end
|
84
85
|
result
|
85
86
|
end
|
86
87
|
|
87
|
-
# Get country that was provided or default country in needable format
|
88
|
-
#
|
89
|
-
# ==== Attributes
|
90
|
-
#
|
91
|
-
# * +country+ - country passed for parsing
|
92
|
-
def country_or_default_country(country)
|
93
|
-
country = country || Phonelib.default_country
|
94
|
-
country && country.to_s.upcase
|
95
|
-
end
|
96
|
-
|
97
88
|
# Create phone representation in e164 format
|
98
89
|
#
|
99
90
|
# ==== Attributes
|
@@ -113,27 +104,6 @@ module Phonelib
|
|
113
104
|
end
|
114
105
|
end
|
115
106
|
|
116
|
-
# constructs full regex for phone validation for provided phone data
|
117
|
-
# (international prefix, country code, national prefix, valid number)
|
118
|
-
#
|
119
|
-
# ==== Attributes
|
120
|
-
#
|
121
|
-
# * +data+ - country data hash
|
122
|
-
# * +country_optional+ - whether to put country code as optional group
|
123
|
-
def full_regex_for_data(data, type, country_optional = true)
|
124
|
-
regex = []
|
125
|
-
regex << "(#{data[Core::INTERNATIONAL_PREFIX]})?"
|
126
|
-
regex << if country_optional
|
127
|
-
"(#{data[Core::COUNTRY_CODE]})?"
|
128
|
-
else
|
129
|
-
data[Core::COUNTRY_CODE]
|
130
|
-
end
|
131
|
-
regex << "(#{data[Core::NATIONAL_PREFIX_FOR_PARSING] || data[Core::NATIONAL_PREFIX]})?"
|
132
|
-
regex << "(#{data[Core::TYPES][Core::GENERAL][type]})"
|
133
|
-
|
134
|
-
cr("^#{regex.join}$")
|
135
|
-
end
|
136
|
-
|
137
107
|
# returns national number and analyzing results for provided phone number
|
138
108
|
#
|
139
109
|
# ==== Attributes
|
@@ -152,21 +122,6 @@ module Phonelib
|
|
152
122
|
{ result[:id] => result }
|
153
123
|
end
|
154
124
|
|
155
|
-
# Check if phone match country data
|
156
|
-
#
|
157
|
-
# ==== Attributes
|
158
|
-
#
|
159
|
-
# * +phone+ - phone number for parsing
|
160
|
-
# * +data+ - country data
|
161
|
-
def phone_match_data?(phone, data, possible = false)
|
162
|
-
country_code = "#{data[Core::COUNTRY_CODE]}"
|
163
|
-
inter_prefix = "(#{data[Core::INTERNATIONAL_PREFIX]})?"
|
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)
|
168
|
-
end
|
169
|
-
|
170
125
|
# Returns all valid and possible phone number types for currently parsed
|
171
126
|
# phone for provided data hash.
|
172
127
|
#
|
@@ -189,28 +144,6 @@ module Phonelib
|
|
189
144
|
sanitize_fixed_mobile(response)
|
190
145
|
end
|
191
146
|
|
192
|
-
# checks if types has both :mobile and :fixed_line and replaces it with
|
193
|
-
# :fixed_or_mobile in case both present
|
194
|
-
def sanitize_fixed_mobile(types)
|
195
|
-
fixed_mobile = [Core::FIXED_LINE, Core::MOBILE]
|
196
|
-
[:possible, :valid].each do |key|
|
197
|
-
if (fixed_mobile - types[key]).empty?
|
198
|
-
types[key] = types[key] - fixed_mobile + [Core::FIXED_OR_MOBILE]
|
199
|
-
end
|
200
|
-
end
|
201
|
-
types
|
202
|
-
end
|
203
|
-
|
204
|
-
# returns array of phone types for check for current country data
|
205
|
-
#
|
206
|
-
# ==== Attributes
|
207
|
-
#
|
208
|
-
# * +data+ - country data hash
|
209
|
-
def types_for_check(data)
|
210
|
-
Core::TYPES_DESC.keys - PhoneAnalyzer::NOT_FOR_CHECK +
|
211
|
-
fixed_and_mobile_keys(data)
|
212
|
-
end
|
213
|
-
|
214
147
|
# Gets matched number formatting rule or default one
|
215
148
|
#
|
216
149
|
# ==== Attributes
|
@@ -225,20 +158,6 @@ module Phonelib
|
|
225
158
|
end || Core::DEFAULT_NUMBER_FORMAT
|
226
159
|
end
|
227
160
|
|
228
|
-
# Checks if fixed line pattern and mobile pattern are the same and returns
|
229
|
-
# appropriate keys
|
230
|
-
#
|
231
|
-
# ==== Attributes
|
232
|
-
#
|
233
|
-
# * +data+ - country data
|
234
|
-
def fixed_and_mobile_keys(data)
|
235
|
-
if data[Core::FIXED_LINE] == data[Core::MOBILE]
|
236
|
-
[Core::FIXED_OR_MOBILE]
|
237
|
-
else
|
238
|
-
[Core::FIXED_LINE, Core::MOBILE]
|
239
|
-
end
|
240
|
-
end
|
241
|
-
|
242
161
|
# Returns possible and valid patterns for validation for provided type
|
243
162
|
#
|
244
163
|
# ==== Attributes
|
@@ -255,27 +174,5 @@ module Phonelib
|
|
255
174
|
[patterns[Core::POSSIBLE_PATTERN], patterns[Core::VALID_PATTERN]]
|
256
175
|
end
|
257
176
|
end
|
258
|
-
|
259
|
-
# Checks if passed number matches valid and possible patterns
|
260
|
-
#
|
261
|
-
# ==== Attributes
|
262
|
-
#
|
263
|
-
# * +number+ - phone number for validation
|
264
|
-
# * +possible_pattern+ - possible pattern for validation
|
265
|
-
# * +national_pattern+ - valid pattern for validation
|
266
|
-
def number_valid_and_possible?(number, possible_pattern, national_pattern)
|
267
|
-
possible_match = number.match(cr("^(?:#{possible_pattern})$"))
|
268
|
-
possible = possible_match && possible_match.to_s.length == number.length
|
269
|
-
|
270
|
-
return [possible, possible] if possible_pattern == national_pattern
|
271
|
-
valid = false
|
272
|
-
if possible
|
273
|
-
# doing national pattern match only in case possible matches
|
274
|
-
national_match = number.match(cr("^(?:#{national_pattern})$"))
|
275
|
-
valid = national_match && national_match.to_s.length == number.length
|
276
|
-
end
|
277
|
-
|
278
|
-
[valid && possible, possible]
|
279
|
-
end
|
280
177
|
end
|
281
178
|
end
|