phonelib 0.4.7 → 0.4.8
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/README.rdoc +14 -1
- data/data/extended_data.dat +0 -0
- data/data/libphonenumber/README.md +18 -17
- data/data/libphonenumber/cpp/src/phonenumbers/base/basictypes.h +60 -5
- data/data/libphonenumber/cpp/src/phonenumbers/base/synchronization/lock.h +3 -1
- data/data/libphonenumber/cpp/src/phonenumbers/lite_metadata.cc +10690 -10653
- data/data/libphonenumber/cpp/src/phonenumbers/metadata.cc +8766 -8724
- data/data/libphonenumber/cpp/src/phonenumbers/short_metadata.cc +1529 -1523
- data/data/libphonenumber/cpp/src/phonenumbers/shortnumberinfo.cc +3 -0
- data/data/libphonenumber/java/carrier/pom.xml +4 -4
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/PhoneNumberToCarrierMapper.java +1 -1
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/1868_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/212_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/232_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/237_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/242_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/249_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/267_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/359_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/380_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/385_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/49_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/592_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/689_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/7_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/961_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/962_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/972_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/977_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/993_en +0 -0
- data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/config +0 -0
- data/data/libphonenumber/java/demo/pom.xml +5 -5
- data/data/libphonenumber/java/demo/war/WEB-INF/appengine-web.xml +1 -1
- data/data/libphonenumber/java/geocoder/pom.xml +4 -4
- data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/226_en +0 -0
- data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/290_en +0 -0
- data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/290_fr +0 -0
- data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/56_en +0 -0
- data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/56_es +0 -0
- data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/592_en +0 -0
- data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/86_en +0 -0
- data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/86_zh +0 -0
- data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/config +0 -0
- data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/timezones/data/map_data +0 -0
- data/data/libphonenumber/java/internal/prefixmapper/pom.xml +3 -3
- data/data/libphonenumber/java/internal/prefixmapper/src/com/google/i18n/phonenumbers/prefixmapper/PrefixTimeZonesMap.java +1 -1
- data/data/libphonenumber/java/libphonenumber/pom.xml +2 -2
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMap.java +4 -7
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberMatch.java +1 -1
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java +4 -4
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/ShortNumberInfo.java +3 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AC +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BG +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CG +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZ +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR +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_IN +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT +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_JP +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_KY +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PL +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SD +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SH +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TM +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VA +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GY +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HR +0 -0
- data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SB +0 -0
- data/data/libphonenumber/java/pom.xml +1 -1
- data/data/libphonenumber/java/release_notes.txt +28 -1
- data/data/libphonenumber/javascript/i18n/phonenumbers/demo-compiled.js +114 -164
- data/data/libphonenumber/javascript/i18n/phonenumbers/metadata.js +79 -78
- data/data/libphonenumber/javascript/i18n/phonenumbers/metadatalite.js +78 -77
- data/data/libphonenumber/resources/PhoneNumberMetadata.xml +750 -606
- data/data/libphonenumber/resources/ShortNumberMetadata.xml +39 -13
- data/data/libphonenumber/resources/carrier/en/1.txt +1 -0
- data/data/libphonenumber/resources/carrier/en/212.txt +1 -0
- data/data/libphonenumber/resources/carrier/en/232.txt +3 -1
- data/data/libphonenumber/resources/carrier/en/237.txt +1 -0
- data/data/libphonenumber/resources/carrier/en/242.txt +5 -2
- data/data/libphonenumber/resources/carrier/en/249.txt +1 -0
- data/data/libphonenumber/resources/carrier/en/267.txt +3 -0
- data/data/libphonenumber/resources/carrier/en/359.txt +1 -0
- data/data/libphonenumber/resources/carrier/en/380.txt +12 -1
- data/data/libphonenumber/resources/carrier/en/385.txt +3 -0
- data/data/libphonenumber/resources/carrier/en/49.txt +6 -0
- data/data/libphonenumber/resources/carrier/en/592.txt +15 -0
- data/data/libphonenumber/resources/carrier/en/60.txt +42 -2
- data/data/libphonenumber/resources/carrier/en/689.txt +16 -0
- data/data/libphonenumber/resources/carrier/en/7.txt +1 -0
- data/data/libphonenumber/resources/carrier/en/91.txt +19 -21
- data/data/libphonenumber/resources/carrier/en/961.txt +16 -6
- data/data/libphonenumber/resources/carrier/en/962.txt +3 -1
- data/data/libphonenumber/resources/carrier/en/972.txt +1 -0
- data/data/libphonenumber/resources/carrier/en/977.txt +1 -0
- data/data/libphonenumber/resources/carrier/en/993.txt +1 -0
- data/data/libphonenumber/resources/geocoding/en/226.txt +21 -21
- data/data/libphonenumber/resources/geocoding/en/290.txt +5 -5
- data/data/libphonenumber/resources/geocoding/en/56.txt +1 -0
- data/data/libphonenumber/resources/geocoding/en/592.txt +82 -0
- data/data/libphonenumber/resources/geocoding/en/86.txt +2438 -113
- data/data/libphonenumber/resources/geocoding/es/56.txt +1 -0
- data/data/libphonenumber/resources/geocoding/fr/290.txt +5 -5
- data/data/libphonenumber/resources/geocoding/zh/86.txt +2438 -113
- data/data/libphonenumber/resources/timezones/map_data.txt +70 -155
- data/data/libphonenumber/tools/cpp/src/base/basictypes.h +22 -4
- data/data/phone_data.dat +0 -0
- data/lib/phonelib/core.rb +41 -1
- data/lib/phonelib/data_importer.rb +40 -112
- data/lib/phonelib/data_importer_helper.rb +89 -0
- data/lib/phonelib/phone.rb +1 -1
- data/lib/phonelib/version.rb +1 -1
- metadata +9 -2
data/data/phone_data.dat
CHANGED
|
Binary file
|
data/lib/phonelib/core.rb
CHANGED
|
@@ -76,6 +76,28 @@ module Phonelib
|
|
|
76
76
|
MOBILE = :mobile
|
|
77
77
|
# In case MOBILE and FIXED patterns are the same, this type is returned
|
|
78
78
|
FIXED_OR_MOBILE = :fixed_or_mobile
|
|
79
|
+
# Short code
|
|
80
|
+
SHORT_CODE = :short_code
|
|
81
|
+
# emergency numbers
|
|
82
|
+
EMERGENCY = :emergency
|
|
83
|
+
# carrier specific type
|
|
84
|
+
CARRIER_SPECIFIC = :carrier_specific
|
|
85
|
+
# SMS Services only type
|
|
86
|
+
SMS_SERVICES = :sms_services
|
|
87
|
+
# expendad emergency type
|
|
88
|
+
EXPANDED_EMERGENCY = :expanded_emergency
|
|
89
|
+
# no international dialling type
|
|
90
|
+
NO_INTERNATIONAL_DIALING = :no_international_dialling
|
|
91
|
+
# carrier services type
|
|
92
|
+
CARRIER_SERVICES = :carrier_services
|
|
93
|
+
# directory services
|
|
94
|
+
DIRECTORY_SERVICES = :directory_services
|
|
95
|
+
# standard rate type
|
|
96
|
+
STANDARD_RATE = :standard_rate
|
|
97
|
+
# carrier selection codes
|
|
98
|
+
CARRIER_SELECTION_CODES = :carrier_selection_codes
|
|
99
|
+
# area code optional type
|
|
100
|
+
AREA_CODE_OPTIONAL = :area_code_optional
|
|
79
101
|
|
|
80
102
|
# Internal use keys for validations
|
|
81
103
|
# Valid regex pattern key
|
|
@@ -122,9 +144,27 @@ module Phonelib
|
|
|
122
144
|
voicemail: 'VoiceMail',
|
|
123
145
|
fixed_line: 'Fixed Line',
|
|
124
146
|
mobile: 'Mobile',
|
|
125
|
-
fixed_or_mobile: 'Fixed Line or Mobile'
|
|
147
|
+
fixed_or_mobile: 'Fixed Line or Mobile',
|
|
148
|
+
short_code: 'Short code',
|
|
149
|
+
emergency: 'Emergency services',
|
|
150
|
+
carrier_specific: 'Carrier specific number',
|
|
151
|
+
sms_services: 'SMS Services only phone',
|
|
152
|
+
expanded_emergency: 'Expanded emergency',
|
|
153
|
+
no_international_dialling: 'No International Dialing phone',
|
|
154
|
+
carrier_services: 'Carrier Services',
|
|
155
|
+
directory_services: 'Directory Services',
|
|
156
|
+
standard_rate: 'Standard Rate Destination',
|
|
157
|
+
carrier_selection_codes: 'Carrier Selection codes',
|
|
158
|
+
area_code_optional: 'Are code optional'
|
|
126
159
|
}
|
|
127
160
|
|
|
161
|
+
SHORT_CODES = [
|
|
162
|
+
:short_code, :emergency, :carrier_specific, :sms_services,
|
|
163
|
+
:expanded_emergency, :no_international_dialling, :carrier_services,
|
|
164
|
+
:directory_services, :standard_rate, :carrier_selection_codes,
|
|
165
|
+
:area_code_optional
|
|
166
|
+
]
|
|
167
|
+
|
|
128
168
|
# Extended data prefixes hash key
|
|
129
169
|
EXT_PREFIXES = :prefixes
|
|
130
170
|
# Extended data geo names array key
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
require 'phonelib/data_importer_helper'
|
|
2
|
+
|
|
1
3
|
module Phonelib
|
|
2
4
|
# module processes creation of data files needed for this gem
|
|
3
5
|
module DataImporter
|
|
@@ -13,6 +15,8 @@ module Phonelib
|
|
|
13
15
|
|
|
14
16
|
# class with functionality for importing data
|
|
15
17
|
class Importer
|
|
18
|
+
include Phonelib::DataImporterHelper
|
|
19
|
+
|
|
16
20
|
# main data file in repo
|
|
17
21
|
MAIN_FILE = 'resources/PhoneNumberMetadata.xml'
|
|
18
22
|
# short number metadata
|
|
@@ -26,11 +30,6 @@ module Phonelib
|
|
|
26
30
|
# timezones data dir in repo
|
|
27
31
|
TIMEZONES_DIR= 'resources/timezones/'
|
|
28
32
|
|
|
29
|
-
# xml comments attributes names that should not be parsed
|
|
30
|
-
XML_COMMENT_ATTRIBUTES = %w(text comment)
|
|
31
|
-
# xml format attributes names
|
|
32
|
-
XML_FORMAT_NAMES = %w(intlFormat format)
|
|
33
|
-
|
|
34
33
|
# class initialization method
|
|
35
34
|
def initialize
|
|
36
35
|
@destination = File.path(
|
|
@@ -93,17 +92,7 @@ module Phonelib
|
|
|
93
92
|
country = get_hash_from_xml(el, :attributes)
|
|
94
93
|
country[:types] = {}
|
|
95
94
|
|
|
96
|
-
|
|
97
|
-
if phone_type.name == 'availableFormats'
|
|
98
|
-
country[:formats] = parse_formats(phone_type.children)
|
|
99
|
-
else
|
|
100
|
-
country[:types][name2sym(phone_type.name)] =
|
|
101
|
-
get_hash_from_xml(phone_type, :element)
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
country[:types] = add_possible_if_not_exists(country[:types])
|
|
106
|
-
|
|
95
|
+
country.merge! get_types_and_formats(el.children)
|
|
107
96
|
@data[country[:id]] = country
|
|
108
97
|
end
|
|
109
98
|
end
|
|
@@ -116,23 +105,13 @@ module Phonelib
|
|
|
116
105
|
country = get_hash_from_xml(el, :attributes)
|
|
117
106
|
country[:types] = {}
|
|
118
107
|
|
|
119
|
-
|
|
120
|
-
country[:types][name2sym(phone_type.name)] =
|
|
121
|
-
get_hash_from_xml(phone_type, :element)
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
country[:types] = add_possible_if_not_exists(country[:types])
|
|
108
|
+
country.merge! get_types_and_formats(el.children)
|
|
125
109
|
|
|
126
|
-
id = country[:id]
|
|
127
110
|
country[:types].each do |type, data|
|
|
128
|
-
@data[
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
@data[id][:types][type][k] += "|#{v}"
|
|
133
|
-
else
|
|
134
|
-
@data[id][:types][type][k] = v
|
|
135
|
-
end
|
|
111
|
+
if @data[country[:id]][:types][type]
|
|
112
|
+
merge_short_with_main_type(country[:id], type, data)
|
|
113
|
+
else
|
|
114
|
+
@data[country[:id]][:types][type] = data
|
|
136
115
|
end
|
|
137
116
|
end
|
|
138
117
|
end
|
|
@@ -179,6 +158,36 @@ module Phonelib
|
|
|
179
158
|
:c)
|
|
180
159
|
end
|
|
181
160
|
|
|
161
|
+
# method extracts formats and types from xml data
|
|
162
|
+
def get_types_and_formats(children)
|
|
163
|
+
types = {}
|
|
164
|
+
formats = []
|
|
165
|
+
|
|
166
|
+
without_comments(children).each do | phone_type |
|
|
167
|
+
if phone_type.name == 'availableFormats'
|
|
168
|
+
formats = parse_formats(phone_type.children)
|
|
169
|
+
else
|
|
170
|
+
types[name2sym(phone_type.name)] =
|
|
171
|
+
get_hash_from_xml(phone_type, :element)
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
types = add_possible_if_not_exists(types)
|
|
176
|
+
|
|
177
|
+
{ types: types, formats: formats }
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
# method adds short number patterns to main data parsed from main xml
|
|
181
|
+
def merge_short_with_main_type(country_id, type, data)
|
|
182
|
+
data.each do |k, v|
|
|
183
|
+
if @data[country_id][:types][type][k]
|
|
184
|
+
@data[country_id][:types][type][k] += "|#{v}"
|
|
185
|
+
else
|
|
186
|
+
@data[country_id][:types][type][k] = v
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
182
191
|
# adds possible pattern in case it doesn't exists
|
|
183
192
|
def add_possible_if_not_exists(types)
|
|
184
193
|
types.each do |type, data|
|
|
@@ -190,33 +199,6 @@ module Phonelib
|
|
|
190
199
|
types
|
|
191
200
|
end
|
|
192
201
|
|
|
193
|
-
# method filters xml elements excluding comments elements
|
|
194
|
-
def without_comments(data)
|
|
195
|
-
data.select do |el|
|
|
196
|
-
!XML_COMMENT_ATTRIBUTES.include? el.name
|
|
197
|
-
end
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
# method creates hash from xml elements/element attributes
|
|
201
|
-
def get_hash_from_xml(data, type)
|
|
202
|
-
hash = {}
|
|
203
|
-
case type
|
|
204
|
-
when :attributes
|
|
205
|
-
data.attributes.each do |k, v|
|
|
206
|
-
hash[name2sym(k)] = str_clean(v)
|
|
207
|
-
end
|
|
208
|
-
when :children
|
|
209
|
-
data.each do |f|
|
|
210
|
-
hash[name2sym(f[0])] = f[1]
|
|
211
|
-
end
|
|
212
|
-
when :element
|
|
213
|
-
data.elements.each do |child|
|
|
214
|
-
hash[name2sym(child.name)] = str_clean(child.children.first)
|
|
215
|
-
end
|
|
216
|
-
end
|
|
217
|
-
hash
|
|
218
|
-
end
|
|
219
|
-
|
|
220
202
|
# method parses xml for formats data
|
|
221
203
|
def parse_formats(formats_children)
|
|
222
204
|
without_comments(formats_children).map do |format|
|
|
@@ -246,45 +228,6 @@ module Phonelib
|
|
|
246
228
|
end
|
|
247
229
|
end
|
|
248
230
|
|
|
249
|
-
# method updates prefixes hash recursively
|
|
250
|
-
def fill_prefixes(key, value, prefix, prefixes)
|
|
251
|
-
prefixes = {} if prefixes.nil?
|
|
252
|
-
if prefix.size == 1
|
|
253
|
-
prefixes[prefix.to_i] = {} unless prefixes[prefix.to_i]
|
|
254
|
-
prefixes[prefix.to_i][key] = value
|
|
255
|
-
else
|
|
256
|
-
pr = prefix[0].to_i
|
|
257
|
-
prefixes[pr] = fill_prefixes(key, value, prefix[1..-1], prefixes[pr])
|
|
258
|
-
end
|
|
259
|
-
prefixes
|
|
260
|
-
end
|
|
261
|
-
|
|
262
|
-
# method parses raw data file
|
|
263
|
-
def parse_raw_file(file)
|
|
264
|
-
data = {}
|
|
265
|
-
File.readlines(file).each do |line|
|
|
266
|
-
line = str_clean line
|
|
267
|
-
next if line.empty? || line[0] == '#'
|
|
268
|
-
prefix, line_data = line.split('|')
|
|
269
|
-
data[prefix] = line_data && line_data.split('&')
|
|
270
|
-
end
|
|
271
|
-
data
|
|
272
|
-
end
|
|
273
|
-
|
|
274
|
-
# method for checking if element name is not a format element
|
|
275
|
-
def is_not_format(name)
|
|
276
|
-
!XML_FORMAT_NAMES.include? name
|
|
277
|
-
end
|
|
278
|
-
|
|
279
|
-
# get main body from parsed xml document
|
|
280
|
-
def main_from_xml(file)
|
|
281
|
-
xml_data = File.read(file)
|
|
282
|
-
xml_data.force_encoding("utf-8")
|
|
283
|
-
|
|
284
|
-
doc = Nokogiri::XML(xml_data)
|
|
285
|
-
doc.elements.first.elements.first
|
|
286
|
-
end
|
|
287
|
-
|
|
288
231
|
# method finds country by country prefix
|
|
289
232
|
def get_country_by_code(country_code)
|
|
290
233
|
match = @data.select { |k, v| v[:country_code] == country_code }
|
|
@@ -294,21 +237,6 @@ module Phonelib
|
|
|
294
237
|
|
|
295
238
|
match.keys.first
|
|
296
239
|
end
|
|
297
|
-
|
|
298
|
-
# helper that cleans string
|
|
299
|
-
def str_clean(s, white_space = true)
|
|
300
|
-
s.to_s.tr(white_space ? " \n" : "\n", '')
|
|
301
|
-
end
|
|
302
|
-
|
|
303
|
-
# helper that converts xml element name to symbol
|
|
304
|
-
def name2sym(name)
|
|
305
|
-
camel2snake(name).to_sym
|
|
306
|
-
end
|
|
307
|
-
|
|
308
|
-
# method that converts camel case to snake case
|
|
309
|
-
def camel2snake(s)
|
|
310
|
-
s.gsub(/[A-Z]+/) { |m| "_#{m.downcase}" }
|
|
311
|
-
end
|
|
312
240
|
end
|
|
313
241
|
end
|
|
314
242
|
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
module Phonelib
|
|
2
|
+
module DataImporterHelper
|
|
3
|
+
# xml comments attributes names that should not be parsed
|
|
4
|
+
XML_COMMENT_ATTRIBUTES = %w(text comment)
|
|
5
|
+
# xml format attributes names
|
|
6
|
+
XML_FORMAT_NAMES = %w(intlFormat format)
|
|
7
|
+
|
|
8
|
+
# method updates prefixes hash recursively
|
|
9
|
+
def fill_prefixes(key, value, prefix, prefixes)
|
|
10
|
+
prefixes = {} if prefixes.nil?
|
|
11
|
+
if prefix.size == 1
|
|
12
|
+
prefixes[prefix.to_i] = {} unless prefixes[prefix.to_i]
|
|
13
|
+
prefixes[prefix.to_i][key] = value
|
|
14
|
+
else
|
|
15
|
+
pr = prefix[0].to_i
|
|
16
|
+
prefixes[pr] = fill_prefixes(key, value, prefix[1..-1], prefixes[pr])
|
|
17
|
+
end
|
|
18
|
+
prefixes
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# method for checking if element name is not a format element
|
|
22
|
+
def is_not_format(name)
|
|
23
|
+
!XML_FORMAT_NAMES.include? name
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# method filters xml elements excluding comments elements
|
|
27
|
+
def without_comments(data)
|
|
28
|
+
data.select do |el|
|
|
29
|
+
!XML_COMMENT_ATTRIBUTES.include? el.name
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# method creates hash from xml elements/element attributes
|
|
34
|
+
def get_hash_from_xml(data, type)
|
|
35
|
+
hash = {}
|
|
36
|
+
case type
|
|
37
|
+
when :attributes
|
|
38
|
+
data.attributes.each do |k, v|
|
|
39
|
+
hash[name2sym(k)] = str_clean(v)
|
|
40
|
+
end
|
|
41
|
+
when :children
|
|
42
|
+
data.each do |f|
|
|
43
|
+
hash[name2sym(f[0])] = f[1]
|
|
44
|
+
end
|
|
45
|
+
when :element
|
|
46
|
+
data.elements.each do |child|
|
|
47
|
+
hash[name2sym(child.name)] = str_clean(child.children.first)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
hash
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# method parses raw data file
|
|
54
|
+
def parse_raw_file(file)
|
|
55
|
+
data = {}
|
|
56
|
+
File.readlines(file).each do |line|
|
|
57
|
+
line = str_clean line
|
|
58
|
+
next if line.empty? || line[0] == '#'
|
|
59
|
+
prefix, line_data = line.split('|')
|
|
60
|
+
data[prefix] = line_data && line_data.split('&')
|
|
61
|
+
end
|
|
62
|
+
data
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# get main body from parsed xml document
|
|
66
|
+
def main_from_xml(file)
|
|
67
|
+
xml_data = File.read(file)
|
|
68
|
+
xml_data.force_encoding("utf-8")
|
|
69
|
+
|
|
70
|
+
doc = Nokogiri::XML(xml_data)
|
|
71
|
+
doc.elements.first.elements.first
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# helper that cleans string
|
|
75
|
+
def str_clean(s, white_space = true)
|
|
76
|
+
s.to_s.tr(white_space ? " \n" : "\n", '')
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# helper that converts xml element name to symbol
|
|
80
|
+
def name2sym(name)
|
|
81
|
+
camel2snake(name).to_sym
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# method that converts camel case to snake case
|
|
85
|
+
def camel2snake(s)
|
|
86
|
+
s.gsub(/[A-Z]+/) { |m| "_#{m.downcase}" }
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
data/lib/phonelib/phone.rb
CHANGED
|
@@ -21,7 +21,7 @@ module Phonelib
|
|
|
21
21
|
if sanitized.empty?
|
|
22
22
|
@data = {}
|
|
23
23
|
else
|
|
24
|
-
@data = analyze(sanitized, country)
|
|
24
|
+
@data = analyze(sanitized, @original.start_with?('+') ? nil : country)
|
|
25
25
|
first = @data.values.first
|
|
26
26
|
@national_number = first ? first[:national] : sanitized
|
|
27
27
|
end
|
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.8
|
|
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-07-27 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake
|
|
@@ -326,6 +326,7 @@ files:
|
|
|
326
326
|
- data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/57_en
|
|
327
327
|
- data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/58_en
|
|
328
328
|
- data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/591_en
|
|
329
|
+
- data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/592_en
|
|
329
330
|
- data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/595_en
|
|
330
331
|
- data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/597_en
|
|
331
332
|
- data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/598_en
|
|
@@ -346,6 +347,7 @@ files:
|
|
|
346
347
|
- data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/679_en
|
|
347
348
|
- data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/685_en
|
|
348
349
|
- data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/686_en
|
|
350
|
+
- data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/689_en
|
|
349
351
|
- data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/7_en
|
|
350
352
|
- data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/84_en
|
|
351
353
|
- data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/852_en
|
|
@@ -875,6 +877,7 @@ files:
|
|
|
875
877
|
- data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/57_en
|
|
876
878
|
- data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/58_en
|
|
877
879
|
- data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/58_es
|
|
880
|
+
- data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/592_en
|
|
878
881
|
- data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/599_en
|
|
879
882
|
- data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/62_en
|
|
880
883
|
- data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/62_id
|
|
@@ -1684,6 +1687,7 @@ files:
|
|
|
1684
1687
|
- data/libphonenumber/resources/carrier/en/57.txt
|
|
1685
1688
|
- data/libphonenumber/resources/carrier/en/58.txt
|
|
1686
1689
|
- data/libphonenumber/resources/carrier/en/591.txt
|
|
1690
|
+
- data/libphonenumber/resources/carrier/en/592.txt
|
|
1687
1691
|
- data/libphonenumber/resources/carrier/en/595.txt
|
|
1688
1692
|
- data/libphonenumber/resources/carrier/en/597.txt
|
|
1689
1693
|
- data/libphonenumber/resources/carrier/en/598.txt
|
|
@@ -1704,6 +1708,7 @@ files:
|
|
|
1704
1708
|
- data/libphonenumber/resources/carrier/en/679.txt
|
|
1705
1709
|
- data/libphonenumber/resources/carrier/en/685.txt
|
|
1706
1710
|
- data/libphonenumber/resources/carrier/en/686.txt
|
|
1711
|
+
- data/libphonenumber/resources/carrier/en/689.txt
|
|
1707
1712
|
- data/libphonenumber/resources/carrier/en/7.txt
|
|
1708
1713
|
- data/libphonenumber/resources/carrier/en/84.txt
|
|
1709
1714
|
- data/libphonenumber/resources/carrier/en/852.txt
|
|
@@ -1835,6 +1840,7 @@ files:
|
|
|
1835
1840
|
- data/libphonenumber/resources/geocoding/en/56.txt
|
|
1836
1841
|
- data/libphonenumber/resources/geocoding/en/57.txt
|
|
1837
1842
|
- data/libphonenumber/resources/geocoding/en/58.txt
|
|
1843
|
+
- data/libphonenumber/resources/geocoding/en/592.txt
|
|
1838
1844
|
- data/libphonenumber/resources/geocoding/en/599.txt
|
|
1839
1845
|
- data/libphonenumber/resources/geocoding/en/62.txt
|
|
1840
1846
|
- data/libphonenumber/resources/geocoding/en/64.txt
|
|
@@ -1973,6 +1979,7 @@ files:
|
|
|
1973
1979
|
- lib/phonelib.rb
|
|
1974
1980
|
- lib/phonelib/core.rb
|
|
1975
1981
|
- lib/phonelib/data_importer.rb
|
|
1982
|
+
- lib/phonelib/data_importer_helper.rb
|
|
1976
1983
|
- lib/phonelib/phone.rb
|
|
1977
1984
|
- lib/phonelib/phone_analyzer.rb
|
|
1978
1985
|
- lib/phonelib/version.rb
|