phonelib 0.6.11 → 0.6.12

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fa38e795e6d299330a008f39f359cdd29ba221fc
4
- data.tar.gz: 9bf8ce164c4838722a06aff72037147852100244
3
+ metadata.gz: a160b71aed28582490691f2c087b27908f2df154
4
+ data.tar.gz: 0a33eb3d681531632e0663826a75d7825e284e67
5
5
  SHA512:
6
- metadata.gz: 61367e9387768b79bbb6d43c5b9718098c4a6772281b24111acd9bce2e6dadcfe08b9aa54aa64e4463b4457e593d4fb08e92da6e15d537dcf083df14d3c5e3f1
7
- data.tar.gz: 58ba6833ce8aec90171faacef75b9fbfd865cd236242cb621c4fff26e457b4dc387c49d9e2293c7b9e0d77eac36d8442cbba830f1fe68011fff4539f54374758
6
+ metadata.gz: 241b111cf80d110df3f4cf27b3bdfe348ff87f3154c8bedd2241439b17594c517323d0c4917891ea23b9c3e95e5a153a704c313d8f58184d565e4e0c3645ccb6
7
+ data.tar.gz: 787995a5acc1ff9cd308a7a359011659566e404c113f53815c4e23ca27c0d77930e47cd952d66181eeb8f491cb379aa612922ad8215037d5cf8557fe2861fd83
Binary file
Binary file
@@ -217,7 +217,10 @@ module Phonelib
217
217
  FORMATS = :formats
218
218
  # @private Pattern key
219
219
  PATTERN = :pattern
220
+ # @private Short key
221
+ SHORT = :short
220
222
 
223
+ # @private Plus sign
221
224
  PLUS_SIGN = '+'.freeze
222
225
 
223
226
  # @private vanity numbers 4 keys letters
@@ -50,7 +50,7 @@ module Phonelib
50
50
 
51
51
  # running import method
52
52
  def run_import
53
- clone_repo
53
+ #clone_repo
54
54
  import_main_data
55
55
  import_short_data
56
56
  import_alternate_formats
@@ -147,7 +147,9 @@ module Phonelib
147
147
  result = { types: {}, formats: [] }
148
148
 
149
149
  without_comments(children).each do |phone_type|
150
- if phone_type.name == 'availableFormats'
150
+ if phone_type.name == 'references'
151
+ next
152
+ elsif phone_type.name == 'availableFormats'
151
153
  result[:formats] = parse_formats(phone_type.children)
152
154
  else
153
155
  result[:types][name2sym(phone_type.name)] =
@@ -161,11 +163,12 @@ module Phonelib
161
163
  # method adds short number patterns to main data parsed from main xml
162
164
  def merge_short_with_main_type(country_id, type, data)
163
165
  @data[country_id][:types][type] ||= {}
166
+ @data[country_id][:types][type][Core::SHORT] ||= {}
164
167
  data.each do |k, v|
165
- if @data[country_id][:types][type][k]
166
- @data[country_id][:types][type][k] += "|#{v}"
168
+ if @data[country_id][:types][type][Core::SHORT][k]
169
+ @data[country_id][:types][type][Core::SHORT][k] += "|#{v}"
167
170
  else
168
- @data[country_id][:types][type][k] = v
171
+ @data[country_id][:types][type][Core::SHORT][k] = v
169
172
  end
170
173
  end
171
174
  end
@@ -174,13 +177,23 @@ module Phonelib
174
177
  def fill_possible_to_types_if_nil(result)
175
178
  result[:types].each do |type, data|
176
179
  if data[Core::VALID_PATTERN] && !data[Core::POSSIBLE_PATTERN]
177
- result[:types][type][Core::POSSIBLE_PATTERN] =
178
- data[Core::VALID_PATTERN]
180
+ result[:types][type][Core::POSSIBLE_PATTERN] = case type
181
+ when Core::GENERAL
182
+ national_possible result[:types]
183
+ else
184
+ data[Core::VALID_PATTERN]
185
+ end
179
186
  end
180
187
  end
181
188
  result
182
189
  end
183
190
 
191
+ # take all possible patters from all types
192
+ def national_possible(types)
193
+ types.map { |k, v| v[:possible_number_pattern] }.
194
+ compact.map { |e| e.split('|') }.flatten.uniq.join('|')
195
+ end
196
+
184
197
  # method parses xml for formats data
185
198
  def parse_formats(formats_children)
186
199
  without_comments(formats_children).map do |format|
@@ -71,12 +71,39 @@ module Phonelib
71
71
  end
72
72
  when :element
73
73
  data.elements.each do |child|
74
- hash[name2sym(child.name)] = str_clean(child.children.first)
74
+ if child.name == 'possibleLengths'
75
+ hash[Core::POSSIBLE_PATTERN] =
76
+ possible_length_regex(hash_from_xml(child, :attributes))
77
+ else
78
+ hash[name2sym(child.name)] = str_clean(child.children.first)
79
+ end
75
80
  end
76
81
  end
77
82
  hash
78
83
  end
79
84
 
85
+ def possible_length_regex(attributes)
86
+ return '' unless attributes[:national]
87
+ attributes[:national].split(',').map do |m|
88
+ if m.include? '-'
89
+ "\\d{#{m.gsub(/[\[\]]/, '').gsub('-', ',')}}"
90
+ else
91
+ "\\d{#{m}}"
92
+ end
93
+ end.join('|')
94
+ =begin
95
+ attributes.map do |k, v|
96
+ v.split(',').map do |m|
97
+ if m.include? '-'
98
+ "\\d{#{m.gsub(/[\[\]]/, '').gsub('-', ',')}}"
99
+ else
100
+ "\\d{#{m}}"
101
+ end
102
+ end.join('|')
103
+ end.join('|')
104
+ =end
105
+ end
106
+
80
107
  # method parses raw data file
81
108
  def parse_raw_file(file)
82
109
  data = {}
@@ -187,10 +187,13 @@ module Phonelib
187
187
  type = Core::FIXED_LINE if type == Core::FIXED_OR_MOBILE
188
188
  patterns = all_patterns[type]
189
189
 
190
- if patterns.nil?
191
- [nil, nil]
190
+ if patterns
191
+ [
192
+ type_regex(patterns, Core::POSSIBLE_PATTERN),
193
+ type_regex(patterns, Core::VALID_PATTERN)
194
+ ]
192
195
  else
193
- [patterns[Core::POSSIBLE_PATTERN], patterns[Core::VALID_PATTERN]]
196
+ [nil, nil]
194
197
  end
195
198
  end
196
199
  end
@@ -105,11 +105,25 @@ module Phonelib
105
105
  regex << "(#{data[Core::INTERNATIONAL_PREFIX]})?"
106
106
  regex << "(#{data[Core::COUNTRY_CODE]})#{country_optional ? '?' : ''}"
107
107
  regex << "(#{data[Core::NATIONAL_PREFIX_FOR_PARSING] || data[Core::NATIONAL_PREFIX]})?"
108
- regex << "(#{data[Core::TYPES][Core::GENERAL][type]})"
108
+ regex << "(#{type_regex(data[Core::TYPES][Core::GENERAL], type)})"
109
109
 
110
110
  cr("^#{regex.join}$")
111
111
  end
112
112
 
113
+ # Returns regex for type with special types if needed
114
+ #
115
+ # ==== Attributes
116
+ #
117
+ # * +data+ - country types data for single type
118
+ # * +type+ - possible or valid regex type needed
119
+ def type_regex(data, type)
120
+ regex = [data[type]]
121
+ if Phonelib.parse_special && data[Core::SHORT] && data[Core::SHORT][type]
122
+ regex << data[Core::SHORT][type]
123
+ end
124
+ regex.join('|')
125
+ end
126
+
113
127
  # Check if phone match country data
114
128
  #
115
129
  # ==== Attributes
@@ -1,4 +1,4 @@
1
1
  module Phonelib
2
2
  # @private
3
- VERSION = '0.6.11'
3
+ VERSION = '0.6.12'
4
4
  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.6.11
4
+ version: 0.6.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vadim Senderovich
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-17 00:00:00.000000000 Z
11
+ date: 2017-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -169,7 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
169
169
  version: '0'
170
170
  requirements: []
171
171
  rubyforge_project:
172
- rubygems_version: 2.4.6
172
+ rubygems_version: 2.6.11
173
173
  signing_key:
174
174
  specification_version: 4
175
175
  summary: Gem validates phone numbers with Google libphonenumber database