phonelib 0.4.7 → 0.4.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. checksums.yaml +4 -4
  2. data/README.rdoc +14 -1
  3. data/data/extended_data.dat +0 -0
  4. data/data/libphonenumber/README.md +18 -17
  5. data/data/libphonenumber/cpp/src/phonenumbers/base/basictypes.h +60 -5
  6. data/data/libphonenumber/cpp/src/phonenumbers/base/synchronization/lock.h +3 -1
  7. data/data/libphonenumber/cpp/src/phonenumbers/lite_metadata.cc +10690 -10653
  8. data/data/libphonenumber/cpp/src/phonenumbers/metadata.cc +8766 -8724
  9. data/data/libphonenumber/cpp/src/phonenumbers/short_metadata.cc +1529 -1523
  10. data/data/libphonenumber/cpp/src/phonenumbers/shortnumberinfo.cc +3 -0
  11. data/data/libphonenumber/java/carrier/pom.xml +4 -4
  12. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/PhoneNumberToCarrierMapper.java +1 -1
  13. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/1868_en +0 -0
  14. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/212_en +0 -0
  15. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/232_en +0 -0
  16. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/237_en +0 -0
  17. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/242_en +0 -0
  18. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/249_en +0 -0
  19. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/267_en +0 -0
  20. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/359_en +0 -0
  21. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/380_en +0 -0
  22. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/385_en +0 -0
  23. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/49_en +0 -0
  24. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/592_en +0 -0
  25. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/60_en +0 -0
  26. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/689_en +0 -0
  27. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/7_en +0 -0
  28. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/91_en +0 -0
  29. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/961_en +0 -0
  30. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/962_en +0 -0
  31. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/972_en +0 -0
  32. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/977_en +0 -0
  33. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/993_en +0 -0
  34. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/config +0 -0
  35. data/data/libphonenumber/java/demo/pom.xml +5 -5
  36. data/data/libphonenumber/java/demo/war/WEB-INF/appengine-web.xml +1 -1
  37. data/data/libphonenumber/java/geocoder/pom.xml +4 -4
  38. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/226_en +0 -0
  39. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/290_en +0 -0
  40. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/290_fr +0 -0
  41. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/56_en +0 -0
  42. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/56_es +0 -0
  43. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/592_en +0 -0
  44. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/86_en +0 -0
  45. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/86_zh +0 -0
  46. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/config +0 -0
  47. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/timezones/data/map_data +0 -0
  48. data/data/libphonenumber/java/internal/prefixmapper/pom.xml +3 -3
  49. data/data/libphonenumber/java/internal/prefixmapper/src/com/google/i18n/phonenumbers/prefixmapper/PrefixTimeZonesMap.java +1 -1
  50. data/data/libphonenumber/java/libphonenumber/pom.xml +2 -2
  51. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMap.java +4 -7
  52. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberMatch.java +1 -1
  53. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java +4 -4
  54. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/ShortNumberInfo.java +3 -0
  55. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AC +0 -0
  56. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF +0 -0
  57. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BG +0 -0
  58. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS +0 -0
  59. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW +0 -0
  60. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CG +0 -0
  61. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL +0 -0
  62. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM +0 -0
  63. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE +0 -0
  64. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZ +0 -0
  65. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR +0 -0
  66. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN +0 -0
  67. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR +0 -0
  68. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL +0 -0
  69. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN +0 -0
  70. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT +0 -0
  71. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JO +0 -0
  72. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP +0 -0
  73. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW +0 -0
  74. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY +0 -0
  75. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB +0 -0
  76. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI +0 -0
  77. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA +0 -0
  78. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP +0 -0
  79. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PL +0 -0
  80. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB +0 -0
  81. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SD +0 -0
  82. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SH +0 -0
  83. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL +0 -0
  84. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TM +0 -0
  85. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT +0 -0
  86. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA +0 -0
  87. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VA +0 -0
  88. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GY +0 -0
  89. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HR +0 -0
  90. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SB +0 -0
  91. data/data/libphonenumber/java/pom.xml +1 -1
  92. data/data/libphonenumber/java/release_notes.txt +28 -1
  93. data/data/libphonenumber/javascript/i18n/phonenumbers/demo-compiled.js +114 -164
  94. data/data/libphonenumber/javascript/i18n/phonenumbers/metadata.js +79 -78
  95. data/data/libphonenumber/javascript/i18n/phonenumbers/metadatalite.js +78 -77
  96. data/data/libphonenumber/resources/PhoneNumberMetadata.xml +750 -606
  97. data/data/libphonenumber/resources/ShortNumberMetadata.xml +39 -13
  98. data/data/libphonenumber/resources/carrier/en/1.txt +1 -0
  99. data/data/libphonenumber/resources/carrier/en/212.txt +1 -0
  100. data/data/libphonenumber/resources/carrier/en/232.txt +3 -1
  101. data/data/libphonenumber/resources/carrier/en/237.txt +1 -0
  102. data/data/libphonenumber/resources/carrier/en/242.txt +5 -2
  103. data/data/libphonenumber/resources/carrier/en/249.txt +1 -0
  104. data/data/libphonenumber/resources/carrier/en/267.txt +3 -0
  105. data/data/libphonenumber/resources/carrier/en/359.txt +1 -0
  106. data/data/libphonenumber/resources/carrier/en/380.txt +12 -1
  107. data/data/libphonenumber/resources/carrier/en/385.txt +3 -0
  108. data/data/libphonenumber/resources/carrier/en/49.txt +6 -0
  109. data/data/libphonenumber/resources/carrier/en/592.txt +15 -0
  110. data/data/libphonenumber/resources/carrier/en/60.txt +42 -2
  111. data/data/libphonenumber/resources/carrier/en/689.txt +16 -0
  112. data/data/libphonenumber/resources/carrier/en/7.txt +1 -0
  113. data/data/libphonenumber/resources/carrier/en/91.txt +19 -21
  114. data/data/libphonenumber/resources/carrier/en/961.txt +16 -6
  115. data/data/libphonenumber/resources/carrier/en/962.txt +3 -1
  116. data/data/libphonenumber/resources/carrier/en/972.txt +1 -0
  117. data/data/libphonenumber/resources/carrier/en/977.txt +1 -0
  118. data/data/libphonenumber/resources/carrier/en/993.txt +1 -0
  119. data/data/libphonenumber/resources/geocoding/en/226.txt +21 -21
  120. data/data/libphonenumber/resources/geocoding/en/290.txt +5 -5
  121. data/data/libphonenumber/resources/geocoding/en/56.txt +1 -0
  122. data/data/libphonenumber/resources/geocoding/en/592.txt +82 -0
  123. data/data/libphonenumber/resources/geocoding/en/86.txt +2438 -113
  124. data/data/libphonenumber/resources/geocoding/es/56.txt +1 -0
  125. data/data/libphonenumber/resources/geocoding/fr/290.txt +5 -5
  126. data/data/libphonenumber/resources/geocoding/zh/86.txt +2438 -113
  127. data/data/libphonenumber/resources/timezones/map_data.txt +70 -155
  128. data/data/libphonenumber/tools/cpp/src/base/basictypes.h +22 -4
  129. data/data/phone_data.dat +0 -0
  130. data/lib/phonelib/core.rb +41 -1
  131. data/lib/phonelib/data_importer.rb +40 -112
  132. data/lib/phonelib/data_importer_helper.rb +89 -0
  133. data/lib/phonelib/phone.rb +1 -1
  134. data/lib/phonelib/version.rb +1 -1
  135. 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
- without_comments(el.children).each do | phone_type |
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
- without_comments(el.children).each do | phone_type |
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[id][:types][type] = data && next unless @data[id][:types][type]
129
-
130
- data.each do |k, v|
131
- if @data[id][:types][type][k]
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
@@ -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
@@ -1,5 +1,5 @@
1
1
  # :nodoc:
2
2
  module Phonelib
3
3
  # :nodoc:
4
- VERSION = '0.4.7'
4
+ VERSION = '0.4.8'
5
5
  end
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.7
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-06-18 00:00:00.000000000 Z
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