phone 1.3.0.beta0 → 1.3.0.beta1
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/.travis.yml +9 -4
- data/ChangeLog.md +6 -0
- data/README.md +25 -5
- data/data/phone/countries.yml +1 -0
- data/lib/phone.rb +139 -77
- data/lib/phone/country.rb +16 -10
- data/lib/phone/version.rb +1 -1
- data/test/countries/me_test.rb +14 -0
- data/test/extension_test.rb +8 -0
- data/test/phone_test.rb +35 -1
- metadata +22 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fab9b04ed81180114e3eda2b6a4ee53589771921
|
4
|
+
data.tar.gz: 1112e0c61798c1e60b21ac26f5cc69dd5365174a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f8abc7778aa6bff2096bcd6d89c93e3aed7484bd9d4ee8ba74329352a229fd2016d009d8749b40549550b1e73678067aee27ca0c8927c12f7b9effc20288155
|
7
|
+
data.tar.gz: debc024c5dd45f515ba9925aaa61c59c7a037aa0be2ba1add877d288b5280c0eb3390492d8097060eed35eba6050c9840cc8d383150671cacb4ee06c3cd12588
|
data/.travis.yml
CHANGED
@@ -3,12 +3,17 @@ bundler_args: --without doc
|
|
3
3
|
rvm:
|
4
4
|
- 1.8.7
|
5
5
|
- 1.9.3
|
6
|
-
- 2.0
|
7
|
-
- 2.1
|
6
|
+
- 2.0
|
7
|
+
- 2.1
|
8
|
+
- rbx
|
9
|
+
- rbx-2
|
10
|
+
- jruby
|
8
11
|
- ruby-head
|
9
|
-
- jruby-19mode
|
10
12
|
- jruby-head
|
11
|
-
|
13
|
+
matrix:
|
14
|
+
allow_failures:
|
15
|
+
- rvm: ruby-head
|
16
|
+
- rvm: jruby-head
|
12
17
|
notifications:
|
13
18
|
email:
|
14
19
|
- github@elskwid.net
|
data/ChangeLog.md
CHANGED
@@ -15,6 +15,12 @@
|
|
15
15
|
* [improvement] Remove need for ActiveSupport detection. (elskwid)
|
16
16
|
* [improvement] Remove monkeypatching support library. (elskwid)
|
17
17
|
* [improvement] Add support for Travis CI. (elskwid)
|
18
|
+
* [improvement] Add tests for parameter mutation in `#valid?`. (elskwid)
|
19
|
+
* [fix] Fix parameter mutation in extension extraction. (elskwid)
|
20
|
+
* [fix] ME (Montenegro) area code correction and tests. (bsboris)
|
21
|
+
* [improvement] Add test for parameter mutation in `::parse`. (elskwid)
|
22
|
+
* [improvement] Code style clean up and method refactoring to clarify processing and remove multiple gsub calls. (elskwid)
|
23
|
+
* [doc] README updates.
|
18
24
|
|
19
25
|
# 1.2.3 / 2013-11-16
|
20
26
|
|
data/README.md
CHANGED
@@ -1,5 +1,19 @@
|
|
1
|
+
[gem]: https://rubygems.org/gems/phone
|
2
|
+
[stable]: https://github.com/carr/phone/tree/v1.2.3
|
3
|
+
[gem-beta]: https://rubygems.org/gems/phone/versions/1.3.0.beta1
|
4
|
+
[beta]: https://github.com/carr/phone/tree/v1.3.0.beta1/
|
5
|
+
[travis]: https://travis-ci.org/carr/phone
|
6
|
+
[gemnasium]: https://gemnasium.com/carr/phone
|
7
|
+
[codeclimate]: https://codeclimate.com/github/carr/phone
|
8
|
+
|
1
9
|
# phone
|
2
10
|
|
11
|
+
[][gem-beta]
|
12
|
+
[][gem]
|
13
|
+
[][travis]
|
14
|
+
[][gemnasium]
|
15
|
+
[][codeclimate]
|
16
|
+
|
3
17
|
Parsing, validating and creating phone numbers
|
4
18
|
|
5
19
|
* [Homepage](https://github.com/carr/phone#readme)
|
@@ -9,11 +23,14 @@ Parsing, validating and creating phone numbers
|
|
9
23
|
|
10
24
|
## Version
|
11
25
|
|
12
|
-
This documentation is for the unreleased development branch.
|
26
|
+
This documentation is for the unreleased development branch.
|
27
|
+
|
28
|
+
* Current release: [1.3.0.beta1][beta]
|
29
|
+
* Current stable: [1.2.3][stable]
|
13
30
|
|
14
31
|
## Description
|
15
32
|
|
16
|
-
|
33
|
+
Ruby library for phone number parsing, validation, and formatting.
|
17
34
|
|
18
35
|
## Features
|
19
36
|
|
@@ -58,7 +75,7 @@ When given a symbol it is used as a lookup for the format in the <tt>Phoner::Pho
|
|
58
75
|
|
59
76
|
```ruby
|
60
77
|
pn.format(:europe) # => "+385 (0) 91 512 5486"
|
61
|
-
pn.format(:us) # => "(234) 123
|
78
|
+
pn.format(:us) # => "(234) 123-4567"
|
62
79
|
pn.format(:default_with_extension) # => "+3851234567x143"
|
63
80
|
```
|
64
81
|
|
@@ -147,13 +164,16 @@ Phoner::Phone.parse '451-588'
|
|
147
164
|
* [HR] Croatia
|
148
165
|
* [HU] Hungary
|
149
166
|
* [IE] Ireland
|
167
|
+
* [ME] Montenegro
|
150
168
|
* [NL] Netherlands
|
151
169
|
* [NZ] New Zealand
|
170
|
+
* [PT] Portugal
|
152
171
|
* [RS] Serbia
|
153
172
|
* [SE] Sweden
|
154
173
|
* [SI] Slovenia
|
155
174
|
* [UA] Ukraine
|
156
175
|
* [US] United States
|
176
|
+
* [UY] Uruguay
|
157
177
|
* [ZA] South Africa
|
158
178
|
|
159
179
|
## Known issues
|
@@ -173,10 +193,10 @@ Or as a Rails plugin
|
|
173
193
|
|
174
194
|
## Copyright
|
175
195
|
|
176
|
-
Copyright (c) 2010-2013 Tomislav Car, [Infinum](http://www.
|
196
|
+
Copyright (c) 2010-2013 Tomislav Car, [Infinum](http://www.infinum.co)
|
177
197
|
Copyright (c) 2013 Don Morrison
|
178
198
|
|
179
|
-
See
|
199
|
+
See [LICENSE.txt](LICENSE.txt) for details.
|
180
200
|
|
181
201
|
## Contributors
|
182
202
|
|
data/data/phone/countries.yml
CHANGED
data/lib/phone.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
# An object representing a phone number.
|
2
2
|
#
|
3
3
|
# The phone number is recorded in 3 separate parts:
|
4
|
-
# * country_code - e.g.
|
5
|
-
# * area_code - e.g.
|
6
|
-
# * number - e.g.
|
4
|
+
# * country_code - e.g. "385", "386"
|
5
|
+
# * area_code - e.g. "91", "47"
|
6
|
+
# * number - e.g. "5125486", "451588"
|
7
7
|
#
|
8
8
|
# All parts are mandatory, but country code and area code can be set for all phone numbers using
|
9
9
|
# Phone.default_country_code
|
@@ -41,15 +41,10 @@ module Phoner
|
|
41
41
|
end
|
42
42
|
include ClassAttributeAccessors
|
43
43
|
|
44
|
-
NUMBER = '([0-9]{1,8})$'
|
45
|
-
DEFAULT_AREA_CODE = '[0-9][0-9][0-9]' # any 3 digits
|
46
|
-
|
47
|
-
attr_accessor :country_code, :area_code, :number, :extension
|
48
|
-
|
49
44
|
self.named_formats = {
|
50
45
|
:default => "+%c%a%n",
|
51
46
|
:default_with_extension => "+%c%a%nx%x",
|
52
|
-
:europe =>
|
47
|
+
:europe => "+%c (0) %a %f %l",
|
53
48
|
:us => "(%a) %f-%l"
|
54
49
|
}
|
55
50
|
|
@@ -57,22 +52,34 @@ module Phoner
|
|
57
52
|
# default length of first number part
|
58
53
|
self.n1_length = 3
|
59
54
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
55
|
+
# phone number pattern
|
56
|
+
NUMBER = "([0-9]{1,8})$".freeze
|
57
|
+
# default area code format - any 3 digits
|
58
|
+
DEFAULT_AREA_CODE = "[0-9][0-9][0-9]".freeze
|
59
|
+
# common extension patterns
|
60
|
+
COMMON_EXTENSIONS = /[ ]*(ext|ex|x|xt|#|:)+[^0-9]*\(*([-0-9]{1,})\)*#?$/i
|
61
|
+
# common extra characters and sequences we normalize out
|
62
|
+
COMMON_EXTRAS = /(\(0\)|[^0-9+]|^\+?00?)/
|
63
|
+
# replacements for extra characters
|
64
|
+
COMMON_EXTRAS_REPLACEMENTS = {
|
65
|
+
"00" => "+",
|
66
|
+
"+00" => "+",
|
67
|
+
"+0" => "+"
|
68
|
+
}
|
69
|
+
# default replacement
|
70
|
+
COMMON_EXTRAS_REPLACEMENTS.default = ""
|
67
71
|
|
68
|
-
|
69
|
-
|
70
|
-
self.country_code = (hash_or_args[ keys[:country_code] ] || self.default_country_code).to_s.strip
|
71
|
-
self.extension = hash_or_args[ keys[:extension] ]
|
72
|
+
# tokens used in the formatting string: %c, %a, %A, etc
|
73
|
+
FORMAT_TOKENS = /(%[caAnflx])/
|
72
74
|
|
73
|
-
|
74
|
-
|
75
|
-
|
75
|
+
# is this string a valid phone number?
|
76
|
+
def self.valid?(string, options = {})
|
77
|
+
begin
|
78
|
+
!parse(string, options).nil?
|
79
|
+
# if we encountered exceptions (missing country code, missing area code etc)
|
80
|
+
rescue PhoneError
|
81
|
+
return false
|
82
|
+
end
|
76
83
|
end
|
77
84
|
|
78
85
|
# create a new phone number by parsing a string
|
@@ -81,7 +88,7 @@ module Phoner
|
|
81
88
|
return if string.to_s.empty?
|
82
89
|
|
83
90
|
Country.load
|
84
|
-
extension = extract_extension(string)
|
91
|
+
string, extension = extract_extension(string)
|
85
92
|
string = normalize(string)
|
86
93
|
|
87
94
|
options[:country_code] ||= self.default_country_code
|
@@ -93,14 +100,27 @@ module Phoner
|
|
93
100
|
return pn
|
94
101
|
end
|
95
102
|
|
103
|
+
# Returns an array of the number with the extension removed, and the extension.
|
104
|
+
#
|
105
|
+
# Example:
|
106
|
+
#
|
107
|
+
# number, ext = Phoner::Phone.extract_extension("+1 (123) 456-7890 x321")
|
108
|
+
# # []
|
109
|
+
def self.extract_extension(string)
|
110
|
+
return [nil, nil] if string.nil?
|
96
111
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
112
|
+
if subbed = string.sub(COMMON_EXTENSIONS, "")
|
113
|
+
[subbed, $2]
|
114
|
+
else
|
115
|
+
[string, nil]
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
# fix string so it's easier to parse, remove extra characters etc.
|
120
|
+
def self.normalize(string_with_number)
|
121
|
+
# TODO: When we drop 1.8.7 we can pass the hash in as an arg to #gsub
|
122
|
+
string_with_number.gsub(COMMON_EXTRAS) do |match|
|
123
|
+
COMMON_EXTRAS_REPLACEMENTS[match.to_s]
|
104
124
|
end
|
105
125
|
end
|
106
126
|
|
@@ -110,7 +130,7 @@ module Phoner
|
|
110
130
|
|
111
131
|
if country
|
112
132
|
options[:country_code] = country.country_code
|
113
|
-
string = string.gsub(country.country_code_regexp,
|
133
|
+
string = string.gsub(country.country_code_regexp, "0")
|
114
134
|
else
|
115
135
|
if options[:country_code]
|
116
136
|
country = Country.find_by_country_code options[:country_code]
|
@@ -136,9 +156,17 @@ module Phoner
|
|
136
156
|
|
137
157
|
case format
|
138
158
|
when :short
|
139
|
-
{
|
159
|
+
{
|
160
|
+
:number => parts[2],
|
161
|
+
:area_code => parts[1],
|
162
|
+
:country_code => options[:country_code]
|
163
|
+
}
|
140
164
|
when :really_short
|
141
|
-
{
|
165
|
+
{
|
166
|
+
:number => parts[1],
|
167
|
+
:area_code => options[:area_code],
|
168
|
+
:country_code => options[:country_code]
|
169
|
+
}
|
142
170
|
end
|
143
171
|
end
|
144
172
|
|
@@ -154,16 +182,6 @@ module Phoner
|
|
154
182
|
detected_country
|
155
183
|
end
|
156
184
|
|
157
|
-
def self.formats(country)
|
158
|
-
area_code_regexp = country.area_code || DEFAULT_AREA_CODE
|
159
|
-
{
|
160
|
-
# 047451588, 013668734
|
161
|
-
:short => Regexp.new('^0?(' + area_code_regexp + ')' + NUMBER),
|
162
|
-
# 451588
|
163
|
-
:really_short => Regexp.new('^' + NUMBER)
|
164
|
-
}
|
165
|
-
end
|
166
|
-
|
167
185
|
# detect format (from FORMATS) of input string
|
168
186
|
def self.detect_format(string_with_number, country)
|
169
187
|
arr = []
|
@@ -171,44 +189,64 @@ module Phoner
|
|
171
189
|
arr << format if string_with_number =~ regexp
|
172
190
|
end
|
173
191
|
|
174
|
-
|
192
|
+
# raise "Detected more than 1 format for #{string_with_number}" if arr.size > 1
|
175
193
|
if arr.length > 1
|
176
|
-
|
194
|
+
# puts %Q{detect_format: more than one format found - #{arr.inspect}}
|
177
195
|
return :really_short
|
178
196
|
end
|
179
197
|
arr.first
|
180
198
|
end
|
181
199
|
|
182
|
-
|
183
|
-
|
184
|
-
|
200
|
+
def self.formats(country)
|
201
|
+
area_code_regexp = country.area_code || DEFAULT_AREA_CODE
|
202
|
+
{
|
203
|
+
# 047451588, 013668734
|
204
|
+
:short => Regexp.new("^0?(#{area_code_regexp})#{NUMBER}"),
|
205
|
+
# 451588
|
206
|
+
:really_short => Regexp.new("^#{NUMBER}")
|
207
|
+
}
|
185
208
|
end
|
186
209
|
|
187
|
-
|
188
|
-
|
210
|
+
attr_accessor :country_code, :area_code, :number, :extension
|
211
|
+
|
212
|
+
# Initialize a new instance with a list or hash of phone number parts
|
189
213
|
#
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
214
|
+
# Example:
|
215
|
+
# Phone.new("5125486", "91", "385")
|
216
|
+
#
|
217
|
+
# # or
|
218
|
+
#
|
219
|
+
# Phone.new(
|
220
|
+
# :number => "5125486",
|
221
|
+
# :area_code => "91",
|
222
|
+
# :country_code => "385",
|
223
|
+
# :extension => "143"
|
224
|
+
# )
|
225
|
+
def initialize(*args)
|
226
|
+
input = args.first.is_a?(Hash) ? args.first : args_to_hash(args)
|
227
|
+
|
228
|
+
# set defaults
|
229
|
+
input[:area_code] ||= self.default_area_code
|
230
|
+
input[:country_code] ||= self.default_country_code
|
231
|
+
|
232
|
+
@number = input[:number].to_s.strip
|
233
|
+
raise BlankNumberError, "Must enter number" if @number.empty?
|
234
|
+
|
235
|
+
@area_code = input[:area_code].to_s.strip
|
236
|
+
raise AreaCodeError,
|
237
|
+
"Must enter area code or set default" if @area_code.empty?
|
238
|
+
|
239
|
+
@country_code = input[:country_code].to_s.strip
|
240
|
+
raise CountryCodeError,
|
241
|
+
"Must enter country code or set default" if @country_code.empty?
|
242
|
+
|
243
|
+
@extension = input[:extension]
|
206
244
|
end
|
207
245
|
|
208
246
|
# format area_code with trailing zero (e.g. 91 as 091)
|
209
247
|
# format area_code with trailing zero (e.g. 91 as 091)
|
210
248
|
def area_code_long
|
211
|
-
"0"
|
249
|
+
"0#{area_code}" if area_code
|
212
250
|
end
|
213
251
|
|
214
252
|
# first n characters of :number
|
@@ -238,7 +276,7 @@ module Phoner
|
|
238
276
|
# pn.format(:europe)
|
239
277
|
def format(fmt)
|
240
278
|
if fmt.is_a?(Symbol)
|
241
|
-
raise "The format #{fmt} doesn't exist
|
279
|
+
raise "The format #{fmt} doesn't exist" unless named_formats.has_key?(fmt)
|
242
280
|
format_number named_formats[fmt]
|
243
281
|
else
|
244
282
|
format_number(fmt)
|
@@ -268,15 +306,39 @@ module Phoner
|
|
268
306
|
|
269
307
|
private
|
270
308
|
|
309
|
+
# Convert initialize arguments into parameter hash
|
310
|
+
#
|
311
|
+
# Example:
|
312
|
+
#
|
313
|
+
# args_to_hash ["5125486", "91", "385"]
|
314
|
+
# #=> { :number => "5125486",
|
315
|
+
# :area_code => "91",
|
316
|
+
# :country_code => "385",
|
317
|
+
# :extension => nil }
|
318
|
+
def args_to_hash(args)
|
319
|
+
{
|
320
|
+
:number => args[0],
|
321
|
+
:area_code => args[1],
|
322
|
+
:country_code => args[2],
|
323
|
+
:extension => args[3]
|
324
|
+
}
|
325
|
+
end
|
326
|
+
|
271
327
|
def format_number(fmt)
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
328
|
+
replacements = {
|
329
|
+
"%c" => (country_code || ""),
|
330
|
+
"%a" => (area_code || ""),
|
331
|
+
"%A" => (area_code_long || ""),
|
332
|
+
"%n" => (number || ""),
|
333
|
+
"%f" => (number1 || ""),
|
334
|
+
"%l" => (number2 || ""),
|
335
|
+
"%x" => (extension || "")
|
336
|
+
}
|
337
|
+
|
338
|
+
# TODO: When we drop 1.8.7 we can pass the hash in as an arg to #gsub
|
339
|
+
fmt.gsub(FORMAT_TOKENS) do |match|
|
340
|
+
replacements[match.to_s]
|
341
|
+
end
|
280
342
|
end
|
281
343
|
end
|
282
344
|
end
|
data/lib/phone/country.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "yaml"
|
2
2
|
|
3
3
|
module Phoner
|
4
4
|
class Country < Struct.new(:name, :country_code, :char_2_code, :char_3_code, :area_code)
|
@@ -14,32 +14,38 @@ module Phoner
|
|
14
14
|
def self.load
|
15
15
|
return self.all if !self.all.nil? && !self.all.empty?
|
16
16
|
|
17
|
-
data_file = File.
|
17
|
+
data_file = File.join("..","..","data", "phone", "countries.yml")
|
18
|
+
data_path = File.expand_path(data_file, File.dirname(__FILE__))
|
18
19
|
|
19
20
|
self.all = {}
|
20
|
-
YAML.load(File.read(
|
21
|
-
self.all[key] = Country.new(
|
21
|
+
YAML.load(File.read(data_path)).each_pair do |key, c|
|
22
|
+
self.all[key] = Country.new(
|
23
|
+
c[:name],
|
24
|
+
c[:country_code],
|
25
|
+
c[:char_2_code],
|
26
|
+
c[:char_3_code],
|
27
|
+
c[:area_code]
|
28
|
+
)
|
22
29
|
end
|
23
30
|
self.all
|
24
31
|
end
|
25
32
|
|
26
|
-
def to_s
|
27
|
-
name
|
28
|
-
end
|
29
|
-
|
30
33
|
def self.find_by_country_code(code)
|
31
34
|
self.all[code]
|
32
35
|
end
|
33
|
-
|
36
|
+
|
34
37
|
def self.find_by_country_isocode(isocode)
|
35
38
|
if country = self.all.detect{|c|c[1].char_3_code.downcase == isocode}
|
36
39
|
country[1]
|
37
40
|
end
|
38
41
|
end
|
39
42
|
|
43
|
+
def to_s
|
44
|
+
name
|
45
|
+
end
|
46
|
+
|
40
47
|
def country_code_regexp
|
41
48
|
@country_code_regexp ||= Regexp.new("^[+]#{country_code}")
|
42
49
|
end
|
43
50
|
end
|
44
|
-
|
45
51
|
end
|
data/lib/phone/version.rb
CHANGED
data/test/extension_test.rb
CHANGED
@@ -22,4 +22,12 @@ class ExtensionTest < Minitest::Test
|
|
22
22
|
assert_equal '(091)/512-5486 x 143', pn.format('(%A)/%f-%l x %x')
|
23
23
|
end
|
24
24
|
|
25
|
+
def test_extract_extension
|
26
|
+
string = "+1 2069735100 x143"
|
27
|
+
number, ext = Phoner::Phone.extract_extension(string)
|
28
|
+
|
29
|
+
assert_equal "+1 2069735100 x143", string
|
30
|
+
assert_equal "+1 2069735100", number
|
31
|
+
assert_equal "143", ext
|
32
|
+
end
|
25
33
|
end
|
data/test/phone_test.rb
CHANGED
@@ -72,13 +72,19 @@ class PhoneTest < Minitest::Test
|
|
72
72
|
end
|
73
73
|
|
74
74
|
def test_parse_with_extension
|
75
|
-
pn = Phoner::Phone.parse"+1 545-545-5454 ext. 4307"
|
75
|
+
pn = Phoner::Phone.parse "+1 545-545-5454 ext. 4307"
|
76
76
|
assert "1", pn.country_code
|
77
77
|
assert "545", pn.area_code
|
78
78
|
assert "5455454", pn.number
|
79
79
|
assert "4307", pn.extension
|
80
80
|
end
|
81
81
|
|
82
|
+
def test_parse_wont_alter_parameter
|
83
|
+
number = "+1 545-545-5454 ext. 4307"
|
84
|
+
parsed = Phoner::Phone.parse number
|
85
|
+
assert_equal "+1 545-545-5454 ext. 4307", number
|
86
|
+
end
|
87
|
+
|
82
88
|
def test_parse_short_without_special_characters_without_country
|
83
89
|
Phoner::Phone.default_country_code = nil
|
84
90
|
|
@@ -95,6 +101,20 @@ class PhoneTest < Minitest::Test
|
|
95
101
|
end
|
96
102
|
end
|
97
103
|
|
104
|
+
def test_normalize
|
105
|
+
numbers = [
|
106
|
+
["(0)512-5486", "5125486"],
|
107
|
+
["z512-5486", "5125486"],
|
108
|
+
["00512-5486", "+5125486"],
|
109
|
+
["+00512-5486", "+5125486"],
|
110
|
+
["+0512-5486", "+5125486"],
|
111
|
+
]
|
112
|
+
|
113
|
+
numbers.each do |number, expected|
|
114
|
+
assert_equal expected, Phoner::Phone.normalize(number)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
98
118
|
def test_to_s
|
99
119
|
Phoner::Phone.default_country_code = nil
|
100
120
|
pn = Phoner::Phone.new '5125486', '91', '385'
|
@@ -150,6 +170,20 @@ class PhoneTest < Minitest::Test
|
|
150
170
|
assert_equal Phoner::Phone.valid?('385915125486'), false
|
151
171
|
end
|
152
172
|
|
173
|
+
def test_valid_wont_strip_the_extension
|
174
|
+
number = '+1 (123) 456-7890 x321'
|
175
|
+
|
176
|
+
parsed = Phoner::Phone.parse(number)
|
177
|
+
assert_equal "+11234567890", parsed.to_s
|
178
|
+
assert_equal "321", parsed.extension
|
179
|
+
|
180
|
+
assert Phoner::Phone.valid?(number)
|
181
|
+
|
182
|
+
parsed = Phoner::Phone.parse(number)
|
183
|
+
assert_equal "+11234567890", parsed.to_s
|
184
|
+
assert_equal"321", parsed.extension
|
185
|
+
end
|
186
|
+
|
153
187
|
def test_comparison_true
|
154
188
|
pn1 = Phoner::Phone.new '5125486', '91', '385'
|
155
189
|
pn2 = Phoner::Phone.new '5125486', '91', '385'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phone
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.0.
|
4
|
+
version: 1.3.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomislav Carr
|
@@ -10,76 +10,76 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2015-08-24 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
|
-
- - ~>
|
19
|
+
- - "~>"
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: '1.2'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
|
-
- - ~>
|
26
|
+
- - "~>"
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
version: '1.2'
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: minitest
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
|
-
- - ~>
|
33
|
+
- - "~>"
|
34
34
|
- !ruby/object:Gem::Version
|
35
35
|
version: '5.0'
|
36
36
|
type: :development
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
39
39
|
requirements:
|
40
|
-
- - ~>
|
40
|
+
- - "~>"
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: '5.0'
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
44
|
name: rake
|
45
45
|
requirement: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
|
-
- - ~>
|
47
|
+
- - "~>"
|
48
48
|
- !ruby/object:Gem::Version
|
49
49
|
version: '10.0'
|
50
50
|
type: :development
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
|
-
- - ~>
|
54
|
+
- - "~>"
|
55
55
|
- !ruby/object:Gem::Version
|
56
56
|
version: '10.0'
|
57
57
|
- !ruby/object:Gem::Dependency
|
58
58
|
name: rubygems-tasks
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
|
-
- - ~>
|
61
|
+
- - "~>"
|
62
62
|
- !ruby/object:Gem::Version
|
63
63
|
version: '0.2'
|
64
64
|
type: :development
|
65
65
|
prerelease: false
|
66
66
|
version_requirements: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
|
-
- - ~>
|
68
|
+
- - "~>"
|
69
69
|
- !ruby/object:Gem::Version
|
70
70
|
version: '0.2'
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: yard
|
73
73
|
requirement: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
|
-
- - ~>
|
75
|
+
- - "~>"
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0.8'
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
80
|
version_requirements: !ruby/object:Gem::Requirement
|
81
81
|
requirements:
|
82
|
-
- - ~>
|
82
|
+
- - "~>"
|
83
83
|
- !ruby/object:Gem::Version
|
84
84
|
version: '0.8'
|
85
85
|
description: Phone number parsing, validation and formatting in Ruby
|
@@ -91,11 +91,11 @@ executables: []
|
|
91
91
|
extensions: []
|
92
92
|
extra_rdoc_files: []
|
93
93
|
files:
|
94
|
-
- .document
|
95
|
-
- .gitignore
|
96
|
-
- .ruby-version
|
97
|
-
- .travis.yml
|
98
|
-
- .yardopts
|
94
|
+
- ".document"
|
95
|
+
- ".gitignore"
|
96
|
+
- ".ruby-version"
|
97
|
+
- ".travis.yml"
|
98
|
+
- ".yardopts"
|
99
99
|
- ChangeLog.md
|
100
100
|
- Gemfile
|
101
101
|
- LICENSE.txt
|
@@ -117,6 +117,7 @@ files:
|
|
117
117
|
- test/countries/hr_test.rb
|
118
118
|
- test/countries/hu_test.rb
|
119
119
|
- test/countries/ie_test.rb
|
120
|
+
- test/countries/me_test.rb
|
120
121
|
- test/countries/nl_test.rb
|
121
122
|
- test/countries/nz_test.rb
|
122
123
|
- test/countries/pt_test.rb
|
@@ -141,17 +142,17 @@ require_paths:
|
|
141
142
|
- lib
|
142
143
|
required_ruby_version: !ruby/object:Gem::Requirement
|
143
144
|
requirements:
|
144
|
-
- -
|
145
|
+
- - ">="
|
145
146
|
- !ruby/object:Gem::Version
|
146
147
|
version: '0'
|
147
148
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
149
|
requirements:
|
149
|
-
- -
|
150
|
+
- - ">"
|
150
151
|
- !ruby/object:Gem::Version
|
151
152
|
version: 1.3.1
|
152
153
|
requirements: []
|
153
154
|
rubyforge_project:
|
154
|
-
rubygems_version: 2.
|
155
|
+
rubygems_version: 2.4.5
|
155
156
|
signing_key:
|
156
157
|
specification_version: 4
|
157
158
|
summary: Phone number parsing, validation and formatting
|
@@ -166,6 +167,7 @@ test_files:
|
|
166
167
|
- test/countries/hr_test.rb
|
167
168
|
- test/countries/hu_test.rb
|
168
169
|
- test/countries/ie_test.rb
|
170
|
+
- test/countries/me_test.rb
|
169
171
|
- test/countries/nl_test.rb
|
170
172
|
- test/countries/nz_test.rb
|
171
173
|
- test/countries/pt_test.rb
|