phony_rails 0.14.7 → 0.14.9

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: 61c4c27ba9b21ca10478542b5ba5f87112b0566e
4
- data.tar.gz: f081e0772586515e34ff639dc1839152a9a19d62
3
+ metadata.gz: a7e279baa79785d7c0db788f230299a530f95900
4
+ data.tar.gz: 2b99f584e90f49369cd5114aac04e6b5c09f198b
5
5
  SHA512:
6
- metadata.gz: f24f3dbb6851ae7e5ef4886a9ac78c316aa735632b02e3083a18c0b7966d34e846f212532aca21db4b315c9c0d54837d6c39c9f5d53735081e9280a47b24e25a
7
- data.tar.gz: 67ede59cd91fe43798eefbb839b3bf17f02e817ce9bd779021f33fad736dee1a34a7ab5f97ff5996e3daf924a16f854f5d8c501154e95a3431cedd48bd7caac3
6
+ metadata.gz: 6ae91b311ac825d4a8fe61b44d7b74ccfa515ab2702c017c5bcf32774b00fcd622ac29c1fea2da0b962643e848b69dcbef5a8871f5b3c92a1db87ff2cb8dc93b
7
+ data.tar.gz: d3cdc2fdc49cabb7562b4916e6b56bd8eaf1b85c2d71b93813cda6dfb025a4538bc564115f30a2bde638717f682198915e38aae38258cfab5a297363e5d5551f
@@ -61,3 +61,6 @@ Style/Documentation:
61
61
  - 'lib/phony_rails.rb'
62
62
  - 'lib/phony_rails/string_extensions.rb'
63
63
  - 'lib/validators/phony_validator.rb'
64
+
65
+ Style/RescueModifier:
66
+ Enabled: false
@@ -1,7 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.2.5
4
- - 2.3.1
3
+ - 2.3.7
4
+ - 2.4.4
5
+ - 2.5.1
5
6
  script:
6
7
  - bundle exec rspec spec
7
8
  - bundle exec rubocop
@@ -1,5 +1,19 @@
1
1
  # Change Log
2
2
 
3
+ ## [v0.14.7](https://github.com/joost/phony_rails/tree/v0.14.7) (2018-05-25)
4
+ [Full Changelog](https://github.com/joost/phony_rails/compare/v0.14.6...v0.14.7)
5
+
6
+ **Closed issues:**
7
+
8
+ - Country code wrapped in brackets is not recognized [\#170](https://github.com/joost/phony_rails/issues/170)
9
+ - Invalid number in countryCode VN [\#159](https://github.com/joost/phony_rails/issues/159)
10
+
11
+ **Merged pull requests:**
12
+
13
+ - Extension option added to normalize\_number [\#176](https://github.com/joost/phony_rails/pull/176) ([ramaboo](https://github.com/ramaboo))
14
+ - return country from phone number [\#169](https://github.com/joost/phony_rails/pull/169) ([aovertus](https://github.com/aovertus))
15
+ - Fix code example in README to match description [\#167](https://github.com/joost/phony_rails/pull/167) ([mattruzicka](https://github.com/mattruzicka))
16
+
3
17
  ## [v0.14.6](https://github.com/joost/phony_rails/tree/v0.14.6) (2017-06-20)
4
18
  [Full Changelog](https://github.com/joost/phony_rails/compare/v0.14.5...v0.14.6)
5
19
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- phony_rails (0.14.7)
4
+ phony_rails (0.14.9)
5
5
  activesupport (>= 3.0)
6
6
  phony (> 2.15)
7
7
 
@@ -32,7 +32,7 @@ GEM
32
32
  tins (~> 1.6)
33
33
  diff-lcs (1.3)
34
34
  docile (1.1.5)
35
- ffi (1.9.18)
35
+ ffi (1.9.25)
36
36
  formatador (0.2.5)
37
37
  guard (2.14.1)
38
38
  formatador (>= 0.2.4)
@@ -74,7 +74,7 @@ GEM
74
74
  parallel (1.12.0)
75
75
  parser (2.4.0.2)
76
76
  ast (~> 2.3)
77
- phony (2.16.3)
77
+ phony (2.16.5)
78
78
  powerpack (0.1.1)
79
79
  pry (0.11.3)
80
80
  coderay (~> 1.1.0)
@@ -140,4 +140,4 @@ DEPENDENCIES
140
140
  sqlite3
141
141
 
142
142
  BUNDLED WITH
143
- 1.16.1
143
+ 1.16.4
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # PhonyRails [![Build Status](https://travis-ci.org/joost/phony_rails.svg?branch=master)](https://travis-ci.org/joost/phony_rails) [![Coverage Status](https://coveralls.io/repos/joost/phony_rails/badge.svg)](https://coveralls.io/r/joost/phony_rails) ![Dependencies Status](https://img.shields.io/gemnasium/joost/phony_rails.svg) ![Gem](https://img.shields.io/gem/v/phony_rails.svg)
1
+ # PhonyRails [![Build Status](https://travis-ci.org/joost/phony_rails.svg?branch=master)](https://travis-ci.org/joost/phony_rails) [![Coverage Status](https://coveralls.io/repos/joost/phony_rails/badge.svg)](https://coveralls.io/r/joost/phony_rails) ![Dependencies Status](https://img.shields.io/gem/v/phony_rails.svg)
2
2
 
3
3
  This small Gem adds useful methods to your Rails app to validate, display and save phone numbers.
4
4
  It uses the super awesome Phony gem (https://github.com/floere/phony).
@@ -133,7 +133,7 @@ validates_plausible_phone :phone_number, without: /\A\+\d+/
133
133
  validates_plausible_phone :phone_number, presence: true, with: /\A\+\d+/
134
134
  ```
135
135
 
136
- the i18n key is `:improbable_phone`. Languages supported by default: de, en, fr, it, ja, kh, nl, tr, ua and ru.
136
+ the i18n key is `:improbable_phone`. Languages supported by default: de, en, es, fr, it, ja, kh, nl, tr, ua and ru.
137
137
 
138
138
  You can also validate if a number has the correct country number:
139
139
 
@@ -44,7 +44,7 @@ module PhonyRails
44
44
  # :extension => Include the extension. (default: true)
45
45
  # This idea came from:
46
46
  # http://www.redguava.com.au/2011/06/rails-convert-phone-numbers-to-international-format-for-sms/
47
- def self.normalize_number(number, options = {})
47
+ def self.normalize_number(number, options = {}, current_instance = nil)
48
48
  return if number.nil?
49
49
  original_number = number
50
50
  number = number.dup # Just to be sure, we don't want to change the original.
@@ -58,7 +58,7 @@ module PhonyRails
58
58
  if !Phony.plausible?(number) || _country_number != country_code_from_number(number)
59
59
  number = "#{_country_number}#{number}"
60
60
  end
61
- elsif _default_country_number = extract_default_country_number(options)
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)
64
64
  end
@@ -76,7 +76,7 @@ module PhonyRails
76
76
  def self.normalize_number_default_country(number, default_country_number)
77
77
  # We try to add the default country number and see if it is a
78
78
  # correct phone number. See https://github.com/joost/phony_rails/issues/87#issuecomment-89324426
79
- unless number =~ /\A\+/ # if we don't have a +
79
+ unless number =~ /\A\(?\+/ # if we don't have a +
80
80
  return "#{default_country_number}#{number}" if Phony.plausible?("#{default_country_number}#{number}") || !Phony.plausible?(number) || country_code_from_number(number).nil?
81
81
  # If the number starts with ONE zero (two might indicate a country code)
82
82
  # and this is a plausible number for the default_country
@@ -88,8 +88,13 @@ module PhonyRails
88
88
  number
89
89
  end
90
90
 
91
- def self.extract_default_country_number(options = {})
92
- options[:default_country_number] || country_number_for(options[:default_country_code]) || default_country_number
91
+ def self.extract_default_country_number(options = {}, current_instance = nil)
92
+ country_code = if current_instance.present? && options[:default_country_code].respond_to?(:call)
93
+ options[:default_country_code].call(current_instance) rescue nil
94
+ else
95
+ options[:default_country_code]
96
+ end
97
+ options[:default_country_number] || country_number_for(country_code) || default_country_number
93
98
  end
94
99
 
95
100
  def self.country_code_from_number(number)
@@ -136,7 +141,7 @@ module PhonyRails
136
141
 
137
142
  # This methods sets the attribute to the normalized version.
138
143
  # It also adds the country_code (number), eg. 31 for NL numbers.
139
- def set_phony_normalized_numbers(attributes, options = {})
144
+ def set_phony_normalized_numbers(current_instance, attributes, options = {})
140
145
  options = options.dup
141
146
  assign_values_for_phony_symbol_options(options)
142
147
  if respond_to?(:country_code)
@@ -146,7 +151,7 @@ module PhonyRails
146
151
  attributes.each do |attribute|
147
152
  attribute_name = options[:as] || attribute
148
153
  raise("No attribute #{attribute_name} found on #{self.class.name} (PhonyRails)") unless self.class.attribute_method?(attribute_name)
149
- new_value = PhonyRails.normalize_number(send(attribute), options)
154
+ new_value = PhonyRails.normalize_number(send(attribute), options, current_instance)
150
155
  send("#{attribute_name}=", new_value) if new_value || attribute_name != attribute
151
156
  end
152
157
  end
@@ -178,7 +183,7 @@ module PhonyRails
178
183
 
179
184
  # Add before validation that saves a normalized version of the phone number
180
185
  before_validation conditional do
181
- set_phony_normalized_numbers(attributes, options)
186
+ set_phony_normalized_numbers(self, attributes, options)
182
187
  end
183
188
  end
184
189
 
@@ -0,0 +1,4 @@
1
+ es:
2
+ errors:
3
+ messages:
4
+ improbable_phone: "es un número inválido"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PhonyRails
4
- VERSION = '0.14.7'
4
+ VERSION = '0.14.9'
5
5
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require File.expand_path('../lib/phony_rails/version', __FILE__)
3
+ require File.expand_path('lib/phony_rails/version', __dir__)
4
4
 
5
5
  Gem::Specification.new do |gem|
6
6
  gem.authors = ['Joost Hietbrink']
@@ -20,7 +20,7 @@ describe PhonyRails do
20
20
  describe 'with the bang!' do
21
21
  it 'changes the String using the bang method' do
22
22
  # Mutable String
23
- s = +'0101234123' rescue '0101234123' # rubocop:disable Style/RescueModifier
23
+ s = +'0101234123' rescue '0101234123'
24
24
  expect(s.phony_formatted!(normalize: :NL, format: :international)).to eql('+31 10 123 4123')
25
25
  expect(s).to eql('+31 10 123 4123')
26
26
  end
@@ -218,6 +218,12 @@ describe PhonyRails do
218
218
  phone = PhonyRails.normalize_number(phone)
219
219
  expect(phone).to eq('+491751234567')
220
220
  end
221
+
222
+ it 'should pass Github issue #170 (part 2)' do
223
+ phone = '(+49) 175 123 4567'
224
+ phone = PhonyRails.normalize_number(phone, default_country_code: 'DE')
225
+ expect(phone).to eq('+491751234567')
226
+ end
221
227
  end
222
228
 
223
229
  it 'should not change original String' do
@@ -722,6 +728,30 @@ describe PhonyRails do
722
728
  expect(model.symboled_phone).to eql('+33606060606')
723
729
  end
724
730
 
731
+ context 'relational normalization' do
732
+ it 'should normalize based on custom attribute of the current model' do
733
+ model_klass.phony_normalize :phone_number, default_country_code: ->(instance) { instance.custom_country_code }
734
+ model = model_klass.new phone_number: '012 416 0001', custom_country_code: 'MY'
735
+ expect(model).to be_valid
736
+ expect(model.phone_number).to eq('+60124160001')
737
+ end
738
+
739
+ it 'should normalize based on specific attribute of the associative model' do
740
+ model_klass.phony_normalize :phone_number, default_country_code: ->(instance) { instance.home_country.country_code }
741
+ home_country = double('home_country', country_code: 'MY')
742
+ model = model_klass.new phone_number: '012 416 0001', home_country: home_country
743
+ expect(model).to be_valid
744
+ expect(model.phone_number).to eq('+60124160001')
745
+ end
746
+
747
+ it 'should normalize based on default value if missing associative model' do
748
+ model_klass.phony_normalize :phone_number, default_country_code: ->(instance) { instance.home_country&.country_code || 'MY' }
749
+ model = model_klass.new phone_number: '012 416 0001', home_country: nil
750
+ expect(model).to be_valid
751
+ expect(model.phone_number).to eq('+60124160001')
752
+ end
753
+ end
754
+
725
755
  context 'conditional normalization' do
726
756
  context 'standalone methods' do
727
757
  it 'should only normalize if the :if conditional is true' do
@@ -240,6 +240,14 @@ describe PhonyPlausibleValidator do
240
240
  end
241
241
  end
242
242
 
243
+ it 'should translate the error message in Spanish' do
244
+ I18n.with_locale(:es) do
245
+ @home.phone_number = INVALID_NUMBER
246
+ @home.valid?
247
+ expect(@home.errors.messages).to include(phone_number: ['es un número inválido'])
248
+ end
249
+ end
250
+
243
251
  it 'should translate the error message in French' do
244
252
  I18n.with_locale(:fr) do
245
253
  @home.phone_number = INVALID_NUMBER
@@ -31,7 +31,10 @@ end
31
31
  module SharedModelMethods
32
32
  extend ActiveSupport::Concern
33
33
  included do
34
- attr_accessor :phone_method, :phone1_method, :symboled_phone_method, :country_code, :country_code_attribute, :recipient, :delivery_method
34
+ attr_accessor(
35
+ :country_code, :country_code_attribute, :custom_country_code, :delivery_method,
36
+ :home_country, :phone_method, :phone1_method, :recipient, :symboled_phone_method
37
+ )
35
38
  phony_normalized_method :phone_attribute # adds normalized_phone_attribute method
36
39
  phony_normalized_method :phone_method # adds normalized_phone_method method
37
40
  phony_normalized_method :phone1_method, default_country_code: 'DE' # adds normalized_phone_method method
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phony_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.7
4
+ version: 0.14.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joost Hietbrink
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-25 00:00:00.000000000 Z
11
+ date: 2018-09-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -90,6 +90,7 @@ files:
90
90
  - lib/phony_rails.rb
91
91
  - lib/phony_rails/locales/de.yml
92
92
  - lib/phony_rails/locales/en.yml
93
+ - lib/phony_rails/locales/es.yml
93
94
  - lib/phony_rails/locales/fr.yml
94
95
  - lib/phony_rails/locales/he.yml
95
96
  - lib/phony_rails/locales/it.yml