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.
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