phony 2.12.11 → 2.12.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: 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