phony 2.12.11 → 2.12.12

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a1162661f981cd2f15b38bb16353bd0b3fe5494c
4
- data.tar.gz: 113626e3af2ef2efc0a23354dff6e29805523b02
3
+ metadata.gz: 0413986973e6c4d3f359a59ae739c43efc8ef2b5
4
+ data.tar.gz: f0cb839c8fb1f6f718a713b01e8e9c0fbc66538a
5
5
  SHA512:
6
- metadata.gz: ee0e39389cca7d127e1eb5ffc957d7dd5bc04e5afdff48c9e1308090444e0872f43e1430def823fe98b0fe1be6a766356b59950ed7ff58ee2d0cd5aa2d17ee09
7
- data.tar.gz: 956b831f60a63a3b443e9cb6ab6348ba85a574a926f32f523e9cd8f61ea13e65e608b2bd3a6814ee1afe6ac9edab071babe1f5a5bd340a33ab39ea2b19ee4844
6
+ metadata.gz: e3a65f282d2feb6c846fad5b870c759e99ed60939b649326f96ced72b253e62223624c4f3d202c1466c5e871f4f2346295f1b31ce2f182d11d36d9c978b4e306
7
+ data.tar.gz: 6ccbb11ac1c8590ffd4a47ef260eda590fe1c5524dfbb9e22b0be8c6a364683864b8cd09d139e5bc6ebb3a3bdc94f909d56dec7442c9e5cf648d25fff4b413ee
@@ -1,4 +1,5 @@
1
1
  "!{float:right}https://secure.travis-ci.org/floere/phony.png!":http://travis-ci.org/floere/phony
2
+ !https://coveralls.io/repos/floere/phony/badge.svg?branch=master(Coverage Status)!:https://coveralls.io/r/floere/phony?branch=master
2
3
  "!https://codeclimate.com/github/floere/phony.png!":https://codeclimate.com/github/floere/phony
3
4
  !http://inch-ci.org/github/floere/phony.png!:http://inch-ci.org/github/floere/phony
4
5
 
@@ -59,13 +59,21 @@ require File.expand_path '../phony/countries/ukraine', __FILE__
59
59
  require File.expand_path '../phony/countries/united_kingdom', __FILE__
60
60
  require File.expand_path '../phony/countries/uruguay', __FILE__
61
61
  require File.expand_path '../phony/countries/zimbabwe', __FILE__
62
- #
62
+
63
63
  # All other countries.
64
64
  #
65
65
  require File.expand_path '../phony/countries', __FILE__
66
66
 
67
+ # Phony is the main module and is generally used to process
68
+ # E164 phone numbers directly.
69
+ #
67
70
  module Phony
68
71
 
72
+ # Raised in case Phony can't normalize a given number.
73
+ #
74
+ # @example
75
+ # Phony.normalize("Fnork!") # Raises a Phony::NormalizationError.
76
+ #
69
77
  class NormalizationError < StandardError
70
78
  def initialize
71
79
  super %Q{Phony could not normalize the given number. Is it a phone number?}
@@ -80,22 +88,56 @@ module Phony
80
88
 
81
89
  # Get the Country for the given CC.
82
90
  #
83
- # Example:
84
- # us = Phony['1']
85
- # normalized_number = us.normalize number
91
+ # @param [String] cc A valid country code.
92
+ #
93
+ # @return [Country] for the given CC.
94
+ #
95
+ # @example Country for the NANP (includes the US)
96
+ # nanp = Phony['1']
97
+ # normalized_number = nanp.normalize number
86
98
  #
87
99
  def [] cc
88
100
  @codes[cc]
89
101
  end
90
102
 
91
- # Normalizes the given number.
103
+ # Normalizes the given number into a digits-only String.
92
104
  #
93
105
  # Useful before inserting the number into a database.
94
106
  #
107
+ # @param [String] phone_number An E164 number.
108
+ # @param [Hash] options An options hash (With :cc as the only used key).
109
+ #
110
+ # @return [String] A normalized E164 number.
111
+ #
112
+ # @raise [Phony::NormalizationError] If phony can't normalize the given number.
113
+ #
114
+ # @example Normalize a Swiss number.
115
+ # Phony.normalize("+41 (044) 123 45 67") # => "41441234567"
116
+ #
117
+ # @example Normalize a phone number assuming it's a NANP number.
118
+ # Phony.normalize("301 555 0100", cc: '1') # => "13015550100"
119
+ #
95
120
  def normalize phone_number, options = {}
96
121
  raise ArgumentError, "Phone number cannot be nil. Use e.g. number && Phony.normalize(number)." unless phone_number
97
122
  normalize! phone_number.dup, options
98
123
  end
124
+ # A destructive version of {#normalize}.
125
+ #
126
+ # @see #normalize
127
+ #
128
+ # @param [String] phone_number An E164 number.
129
+ # @param [Hash] options An options hash (With :cc as the only used key).
130
+ #
131
+ # @return [String] The normalized E164 number.
132
+ #
133
+ # @raise [Phony::NormalizationError] If phony can't normalize the given number.
134
+ #
135
+ # @example Normalize a Swiss number.
136
+ # Phony.normalize!("+41 (044) 123 45 67") # => "41441234567"
137
+ #
138
+ # @example Normalize a phone number assuming it's a NANP number.
139
+ # Phony.normalize!("301 555 0100", cc: '1') # => "13015550100"
140
+ #
99
141
  def normalize! phone_number, options = {}
100
142
  @codes.normalize phone_number, options
101
143
  rescue
@@ -104,22 +146,86 @@ module Phony
104
146
 
105
147
  # Splits the phone number into pieces according to the country codes.
106
148
  #
149
+ # Useful for manually processing the CC, NDC, and local pieces.
150
+ #
151
+ # @param [String] phone_number An E164 number.
152
+ #
153
+ # @return [Array<String>] The pieces of a phone number.
154
+ #
155
+ # @example Split a Swiss number.
156
+ # Phony.split("41441234567") # => ["41", "44", "123", "45", "67"]
157
+ #
158
+ # @example Split a NANP number.
159
+ # Phony.split("13015550100") # => ["1", "301", "555", "0100"]
160
+ #
107
161
  def split phone_number
108
162
  raise ArgumentError, "Phone number cannot be nil. Use e.g. number && Phony.split(number)." unless phone_number
109
163
  split! phone_number.dup
110
164
  end
165
+ # A destructive version of {#split}.
166
+ #
167
+ # @see #split
168
+ #
169
+ # @param [String] phone_number An E164 number.
170
+ #
171
+ # @return [Array<String>] The pieces of the phone number.
172
+ #
173
+ # @example Split a Swiss number.
174
+ # Phony.split!("41441234567") # => ["41", "44", "123", "45", "67"]
175
+ #
176
+ # @example Split a NANP number.
177
+ # Phony.split!("13015550100") # => ["1", "301", "555", "0100"]
178
+ #
111
179
  def split! phone_number
112
180
  parts = @codes.split phone_number
113
181
  parts.delete_at 1
114
182
  parts
115
183
  end
116
184
 
117
- # Formats a E164 number according to local customs.
185
+ # Formats a normalized E164 number according to a country's formatting scheme.
186
+ #
187
+ # Absolutely needs a normalized E164 number.
188
+ #
189
+ # @param [String] phone_number A normalized E164 number.
190
+ # @param [Hash] options See the README for a list of options.
191
+ #
192
+ # @return [Array<String>] The pieces of a phone number.
193
+ #
194
+ # @example Format a Swiss number.
195
+ # Phony.format("41441234567") # => "+41 44 123 45 67"
196
+ #
197
+ # @example Format a NANP number.
198
+ # Phony.format("13015550100") # => "+1 301 555 0100"
199
+ #
200
+ # @example Format a NANP number in local format.
201
+ # Phony.format("13015550100", :format => :local) # => "555 0100"
118
202
  #
119
203
  def format phone_number, options = {}
120
204
  raise ArgumentError, "Phone number cannot be nil. Use e.g. number && Phony.format(number)." unless phone_number
121
205
  format! phone_number.dup, options
122
206
  end
207
+ # A destructive version of {#format}.
208
+ #
209
+ # @see #format
210
+ #
211
+ # Formats a normalized E164 number according to a country's formatting scheme.
212
+ #
213
+ # Absolutely needs a normalized E164 number.
214
+ #
215
+ # @param [String] phone_number A normalized E164 number.
216
+ # @param [Hash] options See the README for a list of options.
217
+ #
218
+ # @return [Array<String>] The pieces of the phone number.
219
+ #
220
+ # @example Format a Swiss number.
221
+ # Phony.format!("41441234567") # => "+41 44 123 45 67"
222
+ #
223
+ # @example Format a NANP number.
224
+ # Phony.format!("13015550100") # => "+1 301 555 0100"
225
+ #
226
+ # @example Format a NANP number in local format.
227
+ # Phony.format!("13015550100", :format => :local) # => "555 0100"
228
+ #
123
229
  def format! phone_number, options = {}
124
230
  @codes.format phone_number, options
125
231
  end
@@ -146,6 +252,13 @@ module Phony
146
252
  # Converts any character in the vanity_number to its numeric representation.
147
253
  # Does not check if the passed number is a valid vanity_number, simply does replacement.
148
254
  #
255
+ # @param [String] vanity_number A vanity number.
256
+ #
257
+ # @return [String] The de-vanitized phone number.
258
+ #
259
+ # @example De-vanitize a number.
260
+ # Phony.vanity_to_number("1-800-HELLOTHERE") # => "1-800-4355684373"
261
+ #
149
262
  def vanity_to_number vanity_number
150
263
  @codes.vanity_to_number vanity_number.dup
151
264
  end
@@ -23,6 +23,24 @@
23
23
  #
24
24
  # Note: The ones that are commented are defined in their special files.
25
25
  #
26
+ # @example Switzerland (simplified)
27
+ # country('41', fixed(2) >> local([3,2,2]))
28
+ #
29
+ # @example Germany. Too big, we use a separate file
30
+ # Phony.define do
31
+ # country '49', match(...) >> split([...]) ||
32
+ # one_of([...], :max_length => 5) >> split([...])
33
+ # end
34
+ #
35
+ # @example Denmark
36
+ # country('45', none >> split([2,2,2,2]))
37
+ #
38
+ # @example Hungary
39
+ # country('36',
40
+ # match(/^104|105|107|112/) >> split([3,3]) ||
41
+ # one_of([1], :max_length => 2) >> split([3,4])
42
+ # )
43
+ #
26
44
  Phony.define do
27
45
 
28
46
  # Reserved.
@@ -336,6 +354,7 @@ Phony.define do
336
354
  none >> matched_split(
337
355
  /\A[23]\d+\z/ => [4,4], # LIBTELCO, TEMAS
338
356
  /\A[4568]\d+\z/ => [4,3], # mobile Lonestar, Libercell, Comium Liberia Inc.
357
+ /\A77\d+\z/ => [2,3,4], # http://monrovia.usembassy.gov/contact.html
339
358
  /\A7\d+\z/ => [4,4], # mobile Cellcom
340
359
  /\A9\d+\z/ => [4,4], # premium rate Telelinks International SAL, Interactive Media Corporation
341
360
  )
@@ -78,7 +78,7 @@ service = [
78
78
  '939'
79
79
  ]
80
80
 
81
- # https://www.rtr.at/en/tk/E129/Austrian_Numbering_Plan_2011-03-30.pdf
81
+ # https://www.rtr.at/en/tk/E129/2312_Austrian_Numbering_Plan_2011-03-30.pdf
82
82
  #
83
83
  # TODO Add more details.
84
84
  #
@@ -91,5 +91,5 @@ Phony.define do
91
91
  one_of('663') >> split(6..6) | # 6 digit mobile.
92
92
  one_of(mobile) >> split(4,3..9) |
93
93
  one_of(mobile_2digit) >> split(7..7) | # Separate as mobile contains 676 - 67 violates the prefix rule.
94
- fixed(4) >> split(7..7)
95
- end
94
+ fixed(4) >> split(3..9) # Number length is 7..13.
95
+ end
@@ -121,12 +121,12 @@ module Phony
121
121
  format % { :cc => cc, :ndc => ndc, :local => local }
122
122
  when nil, :international_absolute, :international, :+
123
123
  ndc ?
124
- @international_absolute_format % [cc, space, ndc, space, local] :
125
- @international_absolute_format % [cc, space, local, nil, nil]
124
+ format_with_ndc(@international_absolute_format, cc, ndc, local, space) :
125
+ format_without_ndc(@international_absolute_format, cc, local, space)
126
126
  when :international_relative
127
127
  ndc ?
128
- @international_relative_format % [cc, space, ndc, space, local] :
129
- @international_relative_format % [cc, space, local, nil, nil]
128
+ format_with_ndc(@international_relative_format, cc, ndc, local, space) :
129
+ format_without_ndc(@international_relative_format, cc, local, space)
130
130
  when :national
131
131
  # Replaces the %s in the trunk code with a "space".
132
132
  trunk = trunk % space if trunk && trunk.size > 1
@@ -141,6 +141,13 @@ module Phony
141
141
  parts_ary.compact!
142
142
  parts_ary.join local_space.to_s
143
143
  end
144
+
145
+ def format_with_ndc format, cc, ndc, local, space
146
+ format % [cc, space, ndc, space, local]
147
+ end
148
+ def format_without_ndc format, cc, local, space
149
+ format % [cc, space, local, nil, nil]
150
+ end
144
151
 
145
152
  #
146
153
  #
@@ -1,27 +1,3 @@
1
- # # Switzerland (simplified):
2
- # #
3
- # country('41', fixed(2) >> local([3,2,2]))
4
- #
5
- # # Germany. Too big, we use a separate file:
6
- # #
7
- # Phony.define do
8
- # country '49', match(...) >> split([...]) ||
9
- # one_of([...], :max_length => 5) >> split([...])
10
- # end
11
- #
12
- # # Denmark:
13
- # #
14
- # country('45', none >> split([2,2,2,2]))
15
- #
16
- # # Hungary:
17
- # #
18
- # country('36',
19
- # match(/^104|105|107|112/) >> split([3,3]) ||
20
- # one_of([1], :max_length => 2) >> split([3,4])
21
- # )
22
- #
23
- # Note: Perhaps the DSL should operate directly on country codes.
24
- #
25
1
  module Phony
26
2
 
27
3
  # For country definitions.
@@ -42,11 +18,26 @@ module Phony
42
18
  dsl
43
19
  end
44
20
 
21
+ # Contains a number of DSL methods. Is used e.g. in the countries.rb file.
22
+ #
23
+ # Do not use directly, but instead use {Phony.define} to execute a block
24
+ # in the DSL instance's context.
25
+ #
26
+ # @example
27
+ # Phony.define { ... }
28
+ #
45
29
  class DSL
46
30
 
47
- # Start defining a country.
31
+ # Define a country's rules.
32
+ #
33
+ # Use the other DSL methods to define the country's rules.
34
+ #
35
+ # @param [String] country_code The country code of the country.
36
+ # @param [Phony::CountryCodes] definition Rules for this country.
37
+ #
38
+ # @return Undefined.
48
39
  #
49
- # Example:
40
+ # @example Add a country with country code 27.
50
41
  # country '27', # CC, followed by rules, for example fixed(2) >> ...
51
42
  #
52
43
  def country country_code, definition, options = {}
@@ -55,12 +46,25 @@ module Phony
55
46
  end
56
47
 
57
48
  # Designates a country code as reserved.
49
+ # A reserved country will result in an exception when trying to be used.
50
+ #
51
+ # @param [String] country_code The country code of the country.
52
+ #
53
+ # @return nil
54
+ #
55
+ # @example Designate country code 27 as reserved.
56
+ # reserved('27')
58
57
  #
59
58
  def reserved country_code
60
59
  # Does nothing, will just fail with an exception.
61
60
  end
62
61
 
63
- # This country still uses a default NDC (and needs to be done, hence the todo).
62
+ # Define a country to use default rules (and to be done at some point).
63
+ #
64
+ # @return Rules for a country.
65
+ #
66
+ # @example Define country 27 to use default rules.
67
+ # country '27', todo
64
68
  #
65
69
  def todo
66
70
  none >> split(10)
@@ -68,10 +72,19 @@ module Phony
68
72
 
69
73
  # This country uses a trunk code.
70
74
  #
71
- # Examples:
72
- # * Hungary uses 06.
73
- # * North America uses 1.
74
- # * Most countries which use a trunk code use 0.
75
+ # @param [String] code The trunk code.
76
+ # @param [Hash] options Options hash. Pass :normalize (true/false) to indicate whether it needs to be normalized.
77
+ #
78
+ # @return TrunkCode A trunk code handler.
79
+ #
80
+ # @example Hungary uses 06.
81
+ # country '36', trunk('06', normalize: false) | ...
82
+ #
83
+ # @example North America uses 1.
84
+ # country '1', trunk('1%s', normalize: true) | ...
85
+ #
86
+ # @example Most countries which use a trunk code use 0. E.g. Romania.
87
+ # country '40', trunk('0') | ...
75
88
  #
76
89
  def trunk code, options = {}
77
90
  TrunkCode.new code, options
@@ -84,12 +97,12 @@ module Phony
84
97
  # uses a zero prefix when formatted
85
98
  # with format :national.
86
99
  #
87
- # Options:
88
- # * length: Length of the fixed length NDC.
89
- # * options: Set :zero to false to not add a zero on format :national.
100
+ # @param [Fixnum] length The length of the fixed length NDC.
101
+ # @param [Hash] options An options hash (set zero: false to not add a zero on format :national).
90
102
  #
91
- # Example:
92
- # # France, uses a fixed NDC of size 1.
103
+ # @return NationalSplitters::Fixed A fixed length national splitter.
104
+ #
105
+ # @example France. Uses a fixed NDC of size 1.
93
106
  # country '33', fixed(1) >> split(2,2,2,2)
94
107
  #
95
108
  def fixed length, options = {}
@@ -97,13 +110,11 @@ module Phony
97
110
  NationalSplitters::Fixed.instance_for length, options
98
111
  end
99
112
 
100
- # This country does not use an NDC. This rule will always match.
113
+ # Marks the country as not using an NDC. This rule will always match.
114
+ #
115
+ # @return NationalSplitters::None A no-ndc national splitter.
101
116
  #
102
- # Examples:
103
- # * Denmark
104
- # * Norway
105
- # * Iceland
106
- # (and more)
117
+ # @example Denmark, Norway, Iceland.
107
118
  #
108
119
  def none
109
120
  NationalSplitters::None.instance_for
@@ -112,11 +123,11 @@ module Phony
112
123
  # If you have a number of (possibly) variable length NDCs
113
124
  # that cannot be well expressed via regexp, use this.
114
125
  #
115
- # Parameters:
116
- # * ndcs A list of ndcs of variable length.
117
- # * Can contain :max_length => number to denote a maximum NDC length.
126
+ # @param [Array<String>] ndcs A list of NDCs of variable length. Can contain :max_length => number to denote a maximum NDC length.
127
+ #
128
+ # @return NationalSplitters::Variable A variable size national splitter.
118
129
  #
119
- # Example:
130
+ # @example With two NDCs
120
131
  # country '51',
121
132
  # # If it's either 103 or 105, then split ...
122
133
  # one_of('103', '105') >> split(3,3)
@@ -134,10 +145,11 @@ module Phony
134
145
  # If you have a number of (possibly) variable length NDCs
135
146
  # that can be well expressed via regexp, use this.
136
147
  #
137
- # Parameters:
138
- # * regex A regexp describing the NDCs (First group must contain the NDC, eg. /^(0\d{2})\d+$/) contains all NDCs with 0xx...
148
+ # @param [Regexp] regex A Regexp describing the NDCs (First group must contain the NDC, eg. /^(0\d{2})\d+$/) contains all NDCs with 0xx...
139
149
  #
140
- # Example:
150
+ # @return NationalSplitters::Regex A regexp-based national splitter.
151
+ #
152
+ # @example With several NDC matchers.
141
153
  # country '52',
142
154
  # match(/^(0\d{2})\d+$/) >> split(2,2,2,2) |
143
155
  # match(/^(33|55|81)\d+$/) >> split(2,2,2,2) |
@@ -158,7 +170,11 @@ module Phony
158
170
  #
159
171
  # Also takes ranges.
160
172
  #
161
- # Example:
173
+ # @param [Array<Fixnum>] local The local group sizes to split the local number part into.
174
+ #
175
+ # @return LocalSplitters::Fixed A fixed size local splitter.
176
+ #
177
+ # @example Splitting in 4 even groups of two digits.
162
178
  # match(/^(0\d{2})\d+$/) >> split(2,2,2,2) # If it matches, split in 4 groups of size 2.
163
179
  #
164
180
  def split *local
@@ -171,18 +187,18 @@ module Phony
171
187
  #
172
188
  # Also takes ranges.
173
189
  #
174
- # Options:
175
- # * fallback A fallback amount of group sizes in case it doesn't match.
190
+ # @param [Hash] options Can contain option :fallback A fallback amount of group sizes in case it doesn't match.
176
191
  #
177
- # Example:
178
- # # Norway
192
+ # @return LocalSplitters::Regex A regexp-based local splitter.
193
+ #
194
+ # @example Norway
179
195
  # country '47',
180
196
  # none >> matched_split(/^[1].*$/ => [3],
181
197
  # /^[489].*$/ => [3,2,3],
182
198
  # :fallback => [2,2,2,2])
183
199
  #
184
200
  def matched_split options = {}
185
- Phony::LocalSplitters::Regex.instance_for options
201
+ LocalSplitters::Regex.instance_for options
186
202
  end
187
203
 
188
204
  # Validators
@@ -190,9 +206,11 @@ module Phony
190
206
 
191
207
  # Which NDCs are explicitly invalid?
192
208
  #
193
- # Takes a regexp or a string.
209
+ # @param [Regexp, String] ndc A regexp or a string of invalid NDCs.
210
+ #
211
+ # @return Validators::NDC An NDC validator
194
212
  #
195
- # Example:
213
+ # @example NANP
196
214
  # country '1',
197
215
  # fixed(3, :zero => false) >> split(3,4),
198
216
  # invalid_ndcs('911') # The regexp /911/ would also work.
@@ -10,10 +10,30 @@ module Phony
10
10
  @instance ||= new
11
11
  end
12
12
 
13
+ # "Splits" the national part of a phone number into a single piece.
14
+ #
15
+ # @param [String] national_number An national part of a number.
16
+ #
17
+ # @return [Array<String>] An Array with the given number part as its element.
18
+ #
19
+ # @example Split the national part of a Swiss number.
20
+ # Phony.split("1234567") # => ["1234567"]
21
+ #
13
22
  def split national_number
14
23
  [national_number]
15
24
  end
16
25
 
26
+ # By default, the national part of a number is always plausible.
27
+ #
28
+ # @param [String] rest An national part of a number (ignored).
29
+ # @param [Fixnum] size Size (ignored).
30
+ # @param [Hash] hints Hints (ignored).
31
+ #
32
+ # @return [Boolean] Always true.
33
+ #
34
+ # @example Split the national part of a Swiss number.
35
+ # Phony.plausible?("1234567") # => true
36
+ #
17
37
  def plausible? rest, size, hints = {}
18
38
  true
19
39
  end
@@ -9,12 +9,7 @@ module Phony
9
9
  #
10
10
  #
11
11
  def >> local_splitter
12
- if local_splitter.respond_to? :split
13
- country_for local_splitter
14
- else
15
- local_splitter.national_splitter = self
16
- local_splitter
17
- end
12
+ country_for local_splitter
18
13
  end
19
14
 
20
15
  def country_for local_splitter
@@ -18,8 +18,10 @@ module Phony
18
18
 
19
19
  # Extract a starting point.
20
20
  #
21
+ # This if can possibly be removed.
22
+ #
21
23
  presumed_code = if @mapped_ndc_min_length > 0
22
- national_number.slice!(0..@mapped_ndc_min_length-1)
24
+ presumed_code = national_number.slice!(0..@mapped_ndc_min_length-1)
23
25
  else
24
26
  ''
25
27
  end
@@ -140,6 +140,7 @@ describe 'plausibility' do
140
140
  Phony.plausible?('+43 501 1234').should be_false # too short
141
141
  Phony.plausible?('+43 501 123456').should be_false # too long
142
142
  Phony.plausible?('+43 800 123456789').should be_true
143
+ Phony.plausible?('+43 3115 3307').should be_true # See issue #246 on Github.
143
144
 
144
145
  # Mobile
145
146
  Phony.plausible?('+43 676 0000000').should be_true
@@ -743,7 +744,11 @@ describe 'plausibility' do
743
744
  '+961 90 123 456',
744
745
  '+961 81 123 456']
745
746
  it_is_correct_for 'Lesotho', :samples => '+266 7612 6866'
746
- it_is_correct_for 'Liberia', :samples => [['+231 2 123 4567', '+231 4 123 456']]
747
+ it 'is correct for Liberia' do
748
+ Phony.plausible?('+231 2 123 4567').should be_true
749
+ Phony.plausible?('+231 4 123 456').should be_true
750
+ Phony.plausible?('+231 77 123 4567').should be_true
751
+ end
747
752
  it_is_correct_for 'Madagascar', :samples => ['+261 20 012 345 678',
748
753
  '+261 20 124 3456',
749
754
  '+261 512 345 678']
@@ -861,6 +861,7 @@ describe 'country descriptions' do
861
861
  describe 'Liberia' do
862
862
  it_splits '23121234567', ['231', false, '2123', '4567']
863
863
  it_splits '2314123456', ['231', false, '4123', '456']
864
+ it_splits '231771234567', ['231', false, '77', '123', '4567']
864
865
  end
865
866
  describe 'Libya' do
866
867
  it_splits '21820512345', %w(218 205 123 45)
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe Phony::NationalSplitters::Default do
4
+
5
+ describe 'instance_for' do
6
+ it 'caches' do
7
+ described_class.instance_for.should equal(described_class.instance_for)
8
+ end
9
+ end
10
+
11
+ context 'with instance' do
12
+ let(:splitter) { described_class.instance_for }
13
+
14
+ describe 'split' do
15
+ it 'does not split' do
16
+ splitter.split(:anything).should == [:anything]
17
+ end
18
+ end
19
+
20
+ describe 'plausible?' do
21
+ it 'is always plausible' do
22
+ splitter.plausible?(:anything, :anything).should be_true
23
+ end
24
+ end
25
+
26
+ describe 'length' do
27
+ it 'needs to be at least 3' do
28
+ splitter.length.should == 3
29
+ end
30
+ end
31
+
32
+ end
33
+
34
+ end
@@ -24,6 +24,9 @@ describe Phony::NationalSplitters::Fixed do
24
24
  it 'splits correctly even when the number is too short' do
25
25
  @splitter.split('443').should == [nil, '44','3']
26
26
  end
27
+ it 'has a length of 2' do
28
+ @splitter.length.should == 2
29
+ end
27
30
  end
28
31
  describe 'split' do
29
32
  before(:each) do
@@ -38,6 +41,9 @@ describe Phony::NationalSplitters::Fixed do
38
41
  it 'splits correctly even when the number is too short' do
39
42
  @splitter.split('443').should == [nil, '443']
40
43
  end
44
+ it 'has a length of nil' do
45
+ @splitter.length.should == nil
46
+ end
41
47
  end
42
48
 
43
49
  end
@@ -8,11 +8,21 @@ describe Phony::NationalSplitters::None do
8
8
  end
9
9
  end
10
10
 
11
- describe 'split' do
11
+ context 'with instance' do
12
12
  let(:splitter) { described_class.instance_for }
13
- it 'splits correctly into ndc and rest' do
14
- splitter.split('123456789').should == [nil, false, '123456789']
13
+
14
+ describe 'split' do
15
+ it 'splits correctly into ndc and rest' do
16
+ splitter.split('123456789').should == [nil, false, '123456789']
17
+ end
18
+ end
19
+
20
+ describe 'length' do
21
+ it 'is always 0' do
22
+ splitter.length.should be_zero
23
+ end
15
24
  end
25
+
16
26
  end
17
27
 
18
28
  end
@@ -19,6 +19,9 @@ describe Phony::NationalSplitters::Variable do
19
19
  it "handles Rohrau" do
20
20
  @splitter.split('2164123456789').should == [nil, '2164', '123456789']
21
21
  end
22
+ it 'has an NDC length of 3' do
23
+ @splitter.length.should == (1..3)
24
+ end
22
25
  end
23
26
  context 'special handling for using the variable size splitter for Swiss service numbers' do
24
27
  before(:each) do
@@ -27,6 +30,9 @@ describe Phony::NationalSplitters::Variable do
27
30
  it "should handle swiss service numbers" do
28
31
  @splitter.split('800223344').should == [nil, '800', '223344']
29
32
  end
33
+ it 'has an NDC length of 3' do
34
+ @splitter.length.should == (3..3)
35
+ end
30
36
  end
31
37
  end
32
38
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phony
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.12.11
4
+ version: 2.12.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Hanke
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-15 00:00:00.000000000 Z
11
+ date: 2015-04-26 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: 'Fast international phone number (E164 standard) normalizing, splitting
14
14
  and formatting. Lots of formatting options: International (+.., 00..), national
@@ -86,6 +86,7 @@ files:
86
86
  - spec/lib/phony/local_splitters/fixed_spec.rb
87
87
  - spec/lib/phony/local_splitters/regex_spec.rb
88
88
  - spec/lib/phony/national_code_spec.rb
89
+ - spec/lib/phony/national_splitters/default_spec.rb
89
90
  - spec/lib/phony/national_splitters/fixed_spec.rb
90
91
  - spec/lib/phony/national_splitters/none_spec.rb
91
92
  - spec/lib/phony/national_splitters/regex_spec.rb
@@ -129,6 +130,7 @@ test_files:
129
130
  - spec/lib/phony/local_splitters/fixed_spec.rb
130
131
  - spec/lib/phony/local_splitters/regex_spec.rb
131
132
  - spec/lib/phony/national_code_spec.rb
133
+ - spec/lib/phony/national_splitters/default_spec.rb
132
134
  - spec/lib/phony/national_splitters/fixed_spec.rb
133
135
  - spec/lib/phony/national_splitters/none_spec.rb
134
136
  - spec/lib/phony/national_splitters/regex_spec.rb