phony_rails 0.14.9 → 0.15.0

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
- SHA1:
3
- metadata.gz: a7e279baa79785d7c0db788f230299a530f95900
4
- data.tar.gz: 2b99f584e90f49369cd5114aac04e6b5c09f198b
2
+ SHA256:
3
+ metadata.gz: 9f5029f29270fa190a8d6bb493268065d2abed1652c3bb63622340309018cced
4
+ data.tar.gz: f6f307074a3348693e6ef4bce515b81b3890ff396a35dd4ed343bcefa3476a8a
5
5
  SHA512:
6
- metadata.gz: 6ae91b311ac825d4a8fe61b44d7b74ccfa515ab2702c017c5bcf32774b00fcd622ac29c1fea2da0b962643e848b69dcbef5a8871f5b3c92a1db87ff2cb8dc93b
7
- data.tar.gz: d3cdc2fdc49cabb7562b4916e6b56bd8eaf1b85c2d71b93813cda6dfb025a4538bc564115f30a2bde638717f682198915e38aae38258cfab5a297363e5d5551f
6
+ metadata.gz: 9153aa4dfd473744cd30b227d1429b0766fd27a0b58c8003aba6677e851390adc0f1b8c237d8b77e0f386c5e3c5f05958aff5a1f1f842a495b68caba5511ffe5
7
+ data.tar.gz: 8cc31c41aceec40c3d0ea203a1e8cec344bc9e0e5fbc407bd78456e9a4fe16b020c5b8b4895eedc3a9e19247dd8f55e41e8349283512871a0282289ea825216a
data/.gitignore CHANGED
@@ -6,3 +6,4 @@
6
6
  coverage/*
7
7
  /.bundle
8
8
  /vendor
9
+ Gemfile.lock
data/.rubocop.yml CHANGED
@@ -1,5 +1,6 @@
1
1
  inherit_from: .rubocop_todo.yml
2
+ require: rubocop-performance
2
3
  AllCops:
3
- TargetRubyVersion: 2.3
4
+ TargetRubyVersion: 2.4
4
5
  Metrics/BlockLength:
5
6
  ExcludedMethods: ['describe', 'context', 'define', 'shared_examples_for']
data/.rubocop_todo.yml CHANGED
@@ -13,6 +13,13 @@ Lint/AssignmentInCondition:
13
13
  - 'lib/phony_rails.rb'
14
14
 
15
15
  # Offense count: 2
16
+ # Cop supports --auto-correct.
17
+ Lint/SendWithMixinArgument:
18
+ Exclude:
19
+ - 'lib/phony_rails.rb'
20
+
21
+ # Offense count: 2
22
+ # Configuration parameters: AllowKeywordBlockArguments.
16
23
  Lint/UnderscorePrefixedVariableName:
17
24
  Exclude:
18
25
  - 'lib/phony_rails.rb'
@@ -46,6 +53,12 @@ Performance/StartWith:
46
53
  Exclude:
47
54
  - 'lib/phony_rails.rb'
48
55
 
56
+ # Offense count: 1
57
+ # Cop supports --auto-correct.
58
+ Performance/RegexpMatch:
59
+ Exclude:
60
+ - 'lib/phony_rails.rb'
61
+
49
62
  # Offense count: 1
50
63
  # Configuration parameters: EnforcedStyle, SupportedStyles.
51
64
  # SupportedStyles: nested, compact
data/.travis.yml CHANGED
@@ -1,8 +1,9 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.3.7
4
3
  - 2.4.4
5
- - 2.5.1
4
+ - 2.5.5
5
+ - 2.6.2
6
+ - 3.0.0
6
7
  script:
7
8
  - bundle exec rspec spec
8
9
  - bundle exec rubocop
data/CHANGELOG.md CHANGED
@@ -1,5 +1,74 @@
1
1
  # Change Log
2
2
 
3
+ ## [v0.14.13](https://github.com/joost/phony_rails/tree/v0.14.13) (2019-07-03)
4
+ [Full Changelog](https://github.com/joost/phony_rails/compare/v0.14.12...v0.14.13)
5
+
6
+ **Closed issues:**
7
+
8
+ - 0.4.11 was the latest release. However the new normalize\_when\_valid has been sitting here for a while... Release? [\#194](https://github.com/joost/phony_rails/issues/194)
9
+
10
+ **Merged pull requests:**
11
+
12
+ - Fixing \#195 - Original value should be cached in correct instance var [\#196](https://github.com/joost/phony_rails/pull/196) ([dlikhten](https://github.com/dlikhten))
13
+
14
+ ## [v0.14.12](https://github.com/joost/phony_rails/tree/v0.14.12) (2019-06-21)
15
+ [Full Changelog](https://github.com/joost/phony_rails/compare/v0.14.11...v0.14.12)
16
+
17
+ **Closed issues:**
18
+
19
+ - Some German numbers not passing plausible\_numbers? without country\_code [\#193](https://github.com/joost/phony_rails/issues/193)
20
+
21
+ **Merged pull requests:**
22
+
23
+ - Upgrade Ruby versions and Relax dependancies [\#192](https://github.com/joost/phony_rails/pull/192) ([berkos](https://github.com/berkos))
24
+ - Add possibility to return original phone number when is not valid [\#190](https://github.com/joost/phony_rails/pull/190) ([synion](https://github.com/synion))
25
+ - Add UK country\_code. [\#189](https://github.com/joost/phony_rails/pull/189) ([ayghor](https://github.com/ayghor))
26
+
27
+ ## [v0.14.11](https://github.com/joost/phony_rails/tree/v0.14.11) (2018-10-11)
28
+ [Full Changelog](https://github.com/joost/phony_rails/compare/v0.14.10...v0.14.11)
29
+
30
+ **Closed issues:**
31
+
32
+ - Problem with normalizing Estonian number [\#187](https://github.com/joost/phony_rails/issues/187)
33
+
34
+ **Merged pull requests:**
35
+
36
+ - Add Korean translation\(including spec\) [\#186](https://github.com/joost/phony_rails/pull/186) ([freelyageha](https://github.com/freelyageha))
37
+
38
+ ## [v0.14.10](https://github.com/joost/phony_rails/tree/v0.14.10) (2018-10-11)
39
+ [Full Changelog](https://github.com/joost/phony_rails/compare/v0.14.9...v0.14.10)
40
+
41
+ **Closed issues:**
42
+
43
+ - PhonyRails.default\_country\_code too intrusive in plausible\_number? method [\#179](https://github.com/joost/phony_rails/issues/179)
44
+ - default\_country\_code overrides 00-prefix country code [\#175](https://github.com/joost/phony_rails/issues/175)
45
+ - Valid 260 area code number is reported as invalid [\#168](https://github.com/joost/phony_rails/issues/168)
46
+ - Croatian number not validating as plausible. [\#165](https://github.com/joost/phony_rails/issues/165)
47
+ - phony\_formatted not returning original String for non-digit only strings [\#163](https://github.com/joost/phony_rails/issues/163)
48
+ - should all normalized numbers be valid? [\#162](https://github.com/joost/phony_rails/issues/162)
49
+ - Extensions not working out of the box for validator [\#160](https://github.com/joost/phony_rails/issues/160)
50
+
51
+ **Merged pull requests:**
52
+
53
+ - Remove errant `puts` [\#188](https://github.com/joost/phony_rails/pull/188) ([stevenharman](https://github.com/stevenharman))
54
+ - Close issues [\#185](https://github.com/joost/phony_rails/pull/185) ([joost](https://github.com/joost))
55
+ - Better PhonyRails.plausible\_number? method. Closes \#179. [\#184](https://github.com/joost/phony_rails/pull/184) ([joost](https://github.com/joost))
56
+ - Allow numbers starting with 00 country codes. Closes \#175. [\#183](https://github.com/joost/phony_rails/pull/183) ([joost](https://github.com/joost))
57
+
58
+ ## [v0.14.9](https://github.com/joost/phony_rails/tree/v0.14.9) (2018-09-05)
59
+ [Full Changelog](https://github.com/joost/phony_rails/compare/v0.14.7...v0.14.9)
60
+
61
+ **Closed issues:**
62
+
63
+ - Cut new release 0.14.7 to include new extension removal logic [\#177](https://github.com/joost/phony_rails/issues/177)
64
+ - default\_country\_code based on relation [\#174](https://github.com/joost/phony_rails/issues/174)
65
+
66
+ **Merged pull requests:**
67
+
68
+ - Allow brackets. Closes \#170. [\#182](https://github.com/joost/phony_rails/pull/182) ([joost](https://github.com/joost))
69
+ - add lambda support for default country code [\#181](https://github.com/joost/phony_rails/pull/181) ([kimyu92](https://github.com/kimyu92))
70
+ - Add Spanish translation for validation error [\#178](https://github.com/joost/phony_rails/pull/178) ([r-sierra](https://github.com/r-sierra))
71
+
3
72
  ## [v0.14.7](https://github.com/joost/phony_rails/tree/v0.14.7) (2018-05-25)
4
73
  [Full Changelog](https://github.com/joost/phony_rails/compare/v0.14.6...v0.14.7)
5
74
 
data/Gemfile CHANGED
@@ -11,6 +11,4 @@ gem 'guard-rspec' # , '~> 4.2.0'
11
11
  gem 'rake'
12
12
  gem 'rspec' # , '~> 2.14.0'
13
13
  gem 'rubocop'
14
-
15
- # For testing
16
- gem 'sqlite3'
14
+ gem 'rubocop-performance'
data/README.md CHANGED
@@ -7,10 +7,10 @@ Find version information in the [CHANGELOG](CHANGELOG.md).
7
7
 
8
8
  ## Installation
9
9
 
10
- Add this line to your application's Gemfile:
10
+ Add this line to your application's Gemfile (requires Ruby > 2.3):
11
11
 
12
12
  ```ruby
13
- gem 'phony_rails' # Include phony_rails after mongoid (if you use mongoid, see issue #66 on github).
13
+ gem 'phony_rails'
14
14
  ```
15
15
 
16
16
  And then execute:
@@ -66,18 +66,10 @@ class SomeModel
66
66
  end
67
67
  ```
68
68
 
69
- #### Mongoid
69
+ #### Mongoid (DEPRECATED)
70
70
 
71
- For **Mongoid**, in keeping with Mongoid plug-in conventions you must include the `Mongoid::Phony` module:
71
+ WARNING: From v0.15.0 Mongoid support has been removed!
72
72
 
73
- ```ruby
74
- class SomeModel
75
- include Mongoid::Document
76
- include Mongoid::Phony
77
-
78
- # methods are same as ActiveRecord usage
79
- end
80
- ```
81
73
  #### General info
82
74
 
83
75
  The `:default_country_code` options is used to specify a country_code when normalizing.
@@ -114,6 +106,7 @@ In your model use the Phony.plausible method to validate an attribute:
114
106
  ```ruby
115
107
  validates :phone_number, phony_plausible: true
116
108
  ```
109
+
117
110
  or the helper method:
118
111
 
119
112
  ```ruby
@@ -121,8 +114,9 @@ validates_plausible_phone :phone_number
121
114
  ```
122
115
 
123
116
  this method use other validators under the hood to provide:
124
- * presence validation using `ActiveModel::Validations::PresenceValidator`
125
- * format validation using `ActiveModel::Validations::FormatValidator`
117
+
118
+ - presence validation using `ActiveModel::Validations::PresenceValidator`
119
+ - format validation using `ActiveModel::Validations::FormatValidator`
126
120
 
127
121
  so we can use:
128
122
 
@@ -133,7 +127,7 @@ validates_plausible_phone :phone_number, without: /\A\+\d+/
133
127
  validates_plausible_phone :phone_number, presence: true, with: /\A\+\d+/
134
128
  ```
135
129
 
136
- the i18n key is `:improbable_phone`. Languages supported by default: de, en, es, fr, it, ja, kh, nl, tr, ua and ru.
130
+ the i18n key is `:improbable_phone`. Languages supported by default: de, en, es, fr, it, ja, kh, ko, nl, tr, ua and ru.
137
131
 
138
132
  You can also validate if a number has the correct country number:
139
133
 
@@ -156,13 +150,29 @@ validates_plausible_phone :phone_number_normalized, presence: true, if: :phone_n
156
150
 
157
151
  Validation supports phone numbers with extension, such as `+18181231234 x1234` or `'+1 (818)151-5483 #4312'` out-of-the-box.
158
152
 
153
+ Return original value after validation:
154
+
155
+ The flag normalize_when_valid (disabled by default), allows to return the original phone_number when is the object is not valid. When phone validation fails, normalization is not triggered at all. It could prevent a situation where user fills in the phone number and after validation, he gets back different, already normalized phone number value, even if phone number was wrong.
156
+
157
+ Example usage:
158
+
159
+ ```ruby
160
+ validates_plausible_phone :phone_number
161
+ phony_normalize :phone_number, country_code: :country_code, normalize_when_valid: true
162
+ ```
163
+
164
+ Filling in the number will result with following:
165
+
166
+ When the number is incorrect (e.g. phone_number: `+44 888 888 888` for country_code 'PL'), the original validation behavior is preserved, but if the number is still invalid, the original value is returned.
167
+ When number is valid, it will save the normalized number (e.g. `+48 888 888 888` will be saved as `+48888888888`).
168
+
159
169
  #### Allowing records country codes to not match phone number country codes
160
170
 
161
- You may have a record specifying one country (via a `country_code` attribute) but using a phone number from another country. For example, your record may be from Japan but have a phone number from the Philippines. By default, `phony_rails` will consider your record's `country_code` as part of the validation. If that country doesn't match the country code in the phone number, validation will fail.
171
+ You may have a record specifying one country (via a `country_code` attribute) but using a phone number from another country. For example, your record may be from Japan but have a phone number from the Philippines. By default, `phony_rails` will consider your record's `country_code` as part of the validation. If that country doesn't match the country code in the phone number, validation will fail.
162
172
 
163
173
  Additionally, `phony_normalize` will always add the records country code as the country number (eg. the user enters '+81xxx' for Japan and the records `country_code` is 'DE' then `phony_normalize` will change the number to '+4981'). You can turn this off by adding `enforce_record_country: false` to the validation options. The country_code will then only be added if no country code is specified.
164
174
 
165
- If you want to allow records from one country to have phone numbers from a different one, there are a couple of options you can use: `ignore_record_country_number` and `ignore_record_country_code`. Use them like so:
175
+ If you want to allow records from one country to have phone numbers from a different one, there are a couple of options you can use: `ignore_record_country_number` and `ignore_record_country_code`. Use them like so:
166
176
 
167
177
  ```ruby
168
178
  validates :phone_number, phony_plausible: { ignore_record_country_code: true, ignore_record_country_number: true }
@@ -216,7 +226,6 @@ Extensions are supported (identified by "ext", "ex", "x", "xt", "#", or ":") and
216
226
  "+31 (0)30 1234 123 #999".phony_normalized # => '31301234123 x999'
217
227
  ```
218
228
 
219
-
220
229
  ### Find by normalized number
221
230
 
222
231
  Say you want to find a record by a phone number. Best is to normalize user input and compare to an attribute stored in the db.
@@ -463,6 +463,8 @@ UA:
463
463
  country_code: '380'
464
464
  UG:
465
465
  country_code: '256'
466
+ UK:
467
+ country_code: '44'
466
468
  UM:
467
469
  country_code: ''
468
470
  US:
data/lib/phony_rails.rb CHANGED
@@ -46,18 +46,18 @@ module PhonyRails
46
46
  # http://www.redguava.com.au/2011/06/rails-convert-phone-numbers-to-international-format-for-sms/
47
47
  def self.normalize_number(number, options = {}, current_instance = nil)
48
48
  return if number.nil?
49
+
49
50
  original_number = number
50
51
  number = number.dup # Just to be sure, we don't want to change the original.
51
52
  number, ext = extract_extension(number)
52
- number.gsub!(/[^\(\)\d\+]/, '') # Strips weird stuff from the number
53
+ number.gsub!(/[^()\d+]/, '') # Strips weird stuff from the number
53
54
  return if number.blank?
55
+
54
56
  if _country_number = options[:country_number] || country_number_for(options[:country_code])
55
57
  options[:add_plus] = true if options[:add_plus].nil?
56
58
  # (Force) add country_number if missing
57
59
  # NOTE: do we need to force adding country code? Otherwise we can share logic with next block
58
- if !Phony.plausible?(number) || _country_number != country_code_from_number(number)
59
- number = "#{_country_number}#{number}"
60
- end
60
+ number = "#{_country_number}#{number}" if !Phony.plausible?(number) || _country_number != country_code_from_number(number)
61
61
  elsif _default_country_number = extract_default_country_number(options, current_instance)
62
62
  options[:add_plus] = true if options[:add_plus].nil?
63
63
  number = normalize_number_default_country(number, _default_country_number)
@@ -67,8 +67,7 @@ module PhonyRails
67
67
  normalized_number = options[:add_plus] ? "+#{normalized_number}" : normalized_number
68
68
 
69
69
  options[:extension] = true if options[:extension].nil?
70
- normalized_number = options[:extension] ? format_extension(normalized_number, ext) : normalized_number
71
- normalized_number
70
+ options[:extension] ? format_extension(normalized_number, ext) : normalized_number
72
71
  rescue StandardError
73
72
  original_number # If all goes wrong .. we still return the original input.
74
73
  end
@@ -76,7 +75,7 @@ module PhonyRails
76
75
  def self.normalize_number_default_country(number, default_country_number)
77
76
  # We try to add the default country number and see if it is a
78
77
  # correct phone number. See https://github.com/joost/phony_rails/issues/87#issuecomment-89324426
79
- unless number =~ /\A\(?\+/ # if we don't have a +
78
+ unless number =~ /\A\(?(\+|00)/ # if we don't have a + or 00
80
79
  return "#{default_country_number}#{number}" if Phony.plausible?("#{default_country_number}#{number}") || !Phony.plausible?(number) || country_code_from_number(number).nil?
81
80
  # If the number starts with ONE zero (two might indicate a country code)
82
81
  # and this is a plausible number for the default_country
@@ -97,23 +96,31 @@ module PhonyRails
97
96
  options[:default_country_number] || country_number_for(country_code) || default_country_number
98
97
  end
99
98
 
99
+ # Returns the country dail code (eg. '31') for a number (eg. +31612341234).
100
+ # Should probably be named 'country_number_from_number'.
100
101
  def self.country_code_from_number(number)
101
102
  return nil unless Phony.plausible?(number)
103
+
102
104
  Phony.split(Phony.normalize(number)).first
103
105
  end
104
106
 
107
+ # Returns the country (eg. 'NL') for a number (eg. +31612341234).
105
108
  def self.country_from_number(number)
106
109
  return nil unless Phony.plausible?(number)
110
+
107
111
  country_codes_hash.select { |_country, hash| hash['country_code'] == country_code_from_number(number) }.keys[0]
108
112
  end
109
113
 
110
114
  # Wrapper for Phony.plausible?. Takes the same options as #normalize_number.
111
115
  # NB: This method calls #normalize_number and passes _options_ directly to that method.
116
+ # It uses the 'cc' option for Phony. This was a required param before?
112
117
  def self.plausible_number?(number, options = {})
113
118
  return false if number.blank?
119
+
114
120
  number = extract_extension(number).first
115
121
  number = normalize_number(number, options)
116
122
  country_number = options[:country_number] || country_number_for(options[:country_code]) ||
123
+ country_code_from_number(number) ||
117
124
  options[:default_country_number] || country_number_for(options[:default_country_code]) ||
118
125
  default_country_number
119
126
  Phony.plausible? number, cc: country_number
@@ -121,10 +128,11 @@ module PhonyRails
121
128
  false
122
129
  end
123
130
 
124
- COMMON_EXTENSIONS = /[ ]*(ext|ex|x|xt|#|:)+[^0-9]*\(?([-0-9]{1,})\)?#?$/i
131
+ COMMON_EXTENSIONS = / *(ext|ex|x|xt|#|:)+[^0-9]*\(?([-0-9]{1,})\)?#?$/i.freeze
125
132
 
126
133
  def self.extract_extension(number_and_ext)
127
134
  return [nil, nil] if number_and_ext.nil?
135
+
128
136
  subbed = number_and_ext.sub(COMMON_EXTENSIONS, '')
129
137
  [subbed, Regexp.last_match(2)]
130
138
  end
@@ -151,8 +159,10 @@ module PhonyRails
151
159
  attributes.each do |attribute|
152
160
  attribute_name = options[:as] || attribute
153
161
  raise("No attribute #{attribute_name} found on #{self.class.name} (PhonyRails)") unless self.class.attribute_method?(attribute_name)
162
+
163
+ cache_original_attribute(current_instance, attribute) if options[:normalize_when_valid]
154
164
  new_value = PhonyRails.normalize_number(send(attribute), options, current_instance)
155
- send("#{attribute_name}=", new_value) if new_value || attribute_name != attribute
165
+ current_instance.public_send("#{attribute_name}=", new_value) if new_value || attribute_name != attribute
156
166
  end
157
167
  end
158
168
 
@@ -164,7 +174,26 @@ module PhonyRails
164
174
  end
165
175
  end
166
176
 
177
+ def cache_original_attribute(current_instance, attribute)
178
+ attribute_name = "#{attribute}_original"
179
+ current_instance.define_singleton_method("#{attribute_name}=") { |value| instance_variable_set("@#{attribute_name}", value) }
180
+ current_instance.define_singleton_method(attribute_name) { instance_variable_get("@#{attribute_name}") }
181
+ current_instance.public_send("#{attribute}_original=", current_instance.public_send(attribute.to_s))
182
+ end
183
+
167
184
  module ClassMethods
185
+ PHONY_RAILS_COLLECTION_VALID_KEYS = %i[
186
+ add_plus
187
+ as
188
+ country_code
189
+ country_number
190
+ default_country_code
191
+ default_country_number
192
+ enforce_record_country
193
+ if
194
+ normalize_when_valid
195
+ unless
196
+ ].freeze
168
197
  # Use this method on the class level like:
169
198
  # phony_normalize :phone_number, :fax_number, :default_country_code => 'NL'
170
199
  #
@@ -172,10 +201,8 @@ module PhonyRails
172
201
  # you've geocoded before calling this method!
173
202
  def phony_normalize(*attributes)
174
203
  options = attributes.last.is_a?(Hash) ? attributes.pop : {}
175
- options.assert_valid_keys :country_number, :default_country_number, :country_code, :default_country_code, :add_plus, :as, :enforce_record_country, :if, :unless
176
- if options[:as].present?
177
- raise ArgumentError, ':as option can not be used on phony_normalize with multiple attribute names! (PhonyRails)' if attributes.size > 1
178
- end
204
+ options.assert_valid_keys(*PHONY_RAILS_COLLECTION_VALID_KEYS)
205
+ raise ArgumentError, ':as option can not be used on phony_normalize with multiple attribute names! (PhonyRails)' if options[:as].present? && (attributes.size > 1)
179
206
 
180
207
  options[:enforce_record_country] = true if options[:enforce_record_country].nil?
181
208
 
@@ -195,10 +222,12 @@ module PhonyRails
195
222
  main_options.assert_valid_keys :country_code, :default_country_code
196
223
  attributes.each do |attribute|
197
224
  raise(StandardError, "Instance method normalized_#{attribute} already exists on #{name} (PhonyRails)") if method_defined?(:"normalized_#{attribute}")
225
+
198
226
  define_method :"normalized_#{attribute}" do |*args|
199
227
  options = main_options.merge(args.first || {})
200
228
  assign_values_for_phony_symbol_options(options)
201
229
  raise(ArgumentError, "No attribute/method #{attribute} found on #{self.class.name} (PhonyRails)") unless respond_to?(attribute)
230
+
202
231
  options[:country_code] ||= country_code if respond_to?(:country_code)
203
232
  PhonyRails.normalize_number(send(attribute), options)
204
233
  end
@@ -246,12 +275,12 @@ end
246
275
 
247
276
  ActiveModel::Model.send :include, PhonyRails::Extension if defined?(ActiveModel::Model)
248
277
 
249
- if defined?(Mongoid)
250
- module Mongoid::Phony
251
- extend ActiveSupport::Concern
252
- include PhonyRails::Extension
253
- end
254
- end
278
+ # if defined?(Mongoid)
279
+ # module Mongoid::Phony
280
+ # extend ActiveSupport::Concern
281
+ # include PhonyRails::Extension
282
+ # end
283
+ # end
255
284
 
256
285
  Dir["#{File.dirname(__FILE__)}/phony_rails/locales/*.yml"].each do |file|
257
286
  I18n.load_path << file
@@ -0,0 +1,4 @@
1
+ ko:
2
+ errors:
3
+ messages:
4
+ improbable_phone: "는 올바른 전화번호가 아닙니다"
@@ -7,6 +7,7 @@ class String
7
7
  # "(0)30 1234 123".phony_normalized(country_code: 'NL') # => '301234123'
8
8
  def phony_normalized(options = {})
9
9
  raise ArgumentError, "Expected options to be a Hash, got #{options.inspect}" unless options.is_a?(Hash)
10
+
10
11
  options = options.dup
11
12
  PhonyRails.normalize_number(self, options)
12
13
  end
@@ -24,21 +25,25 @@ class String
24
25
  # "somestring".phone_formatted(raise: true)
25
26
  def phony_formatted(options = {})
26
27
  raise ArgumentError, "Expected options to be a Hash, got #{options.inspect}" unless options.is_a?(Hash)
28
+
27
29
  options = options.dup
28
30
  normalize_country_code = options.delete(:normalize)
29
31
  s, ext = PhonyRails.extract_extension(self)
30
32
  s = (normalize_country_code ? PhonyRails.normalize_number(s, default_country_code: normalize_country_code.to_s, add_plus: false) : s.gsub(/\D/, ''))
31
33
  return if s.blank?
32
34
  return if options[:strict] && !Phony.plausible?(s)
35
+
33
36
  PhonyRails.format_extension(Phony.format(s, options.reverse_merge(format: :national)), ext)
34
37
  rescue StandardError
35
38
  raise if options[:raise]
39
+
36
40
  s
37
41
  end
38
42
 
39
43
  # The bang method
40
44
  def phony_formatted!(options = {})
41
45
  raise ArgumentError, 'The :strict options is only supported in the phony_formatted (non bang) method.' if options[:strict]
46
+
42
47
  replace(phony_formatted(options))
43
48
  end
44
49
  end