Skip to content

Commit

Permalink
Add support for PhonyRails.default_country_code that would be used by…
Browse files Browse the repository at this point in the history
… normalize_number and plausible_number?
  • Loading branch information
jerryclinesmith committed Apr 2, 2016
1 parent e695c83 commit 6465ad6
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 2 deletions.
23 changes: 21 additions & 2 deletions lib/phony_rails.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,24 @@
require 'yaml'

module PhonyRails

def self.default_country_code
@default_country_code ||= nil
end

def self.default_country_code=(new_code)
@default_country_code = new_code
@default_country_number = nil # Reset default country number, will lookup next time its asked for
end

def self.default_country_number
@default_country_number ||= default_country_code.present? ? country_number_for(default_country_code) : nil
end

def self.default_country_number=(new_number)
@default_country_number = new_number
end

def self.country_number_for(country_code)
return if country_code.nil?

Expand Down Expand Up @@ -37,7 +55,7 @@ def self.normalize_number(number, options = {})
if !Phony.plausible?(number) || _country_number != country_code_from_number(number)
number = "#{_country_number}#{number}"
end
elsif _default_country_number = options[:default_country_number] || country_number_for(options[:default_country_code])
elsif _default_country_number = options[:default_country_number] || country_number_for(options[:default_country_code]) || default_country_number
options[:add_plus] = true if options[:add_plus].nil?
# We try to add the default country number and see if it is a
# correct phone number. See https://github.com/joost/phony_rails/issues/87#issuecomment-89324426
Expand Down Expand Up @@ -71,7 +89,8 @@ def self.plausible_number?(number, options = {})
return false if number.nil? || number.blank?
number = normalize_number(number, options)
country_number = options[:country_number] || country_number_for(options[:country_code]) ||
options[:default_country_number] || country_number_for(options[:default_country_code])
options[:default_country_number] || country_number_for(options[:default_country_code]) ||
default_country_number
Phony.plausible? number, cc: country_number
rescue
false
Expand Down
43 changes: 43 additions & 0 deletions spec/lib/phony_rails_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,31 @@ class NormalHome < ActiveRecord::Base
it 'should normalize even an implausible number' do
expect(PhonyRails.normalize_number('01')).to eql('1')
end

context 'with default_country_code set' do

before { PhonyRails.default_country_code = 'NL' }
after { PhonyRails.default_country_code = nil }

it 'normalize using the default' do
expect(PhonyRails.normalize_number('010-1234123')).to eql('+31101234123')
expect(PhonyRails.normalize_number('010-1234123')).to eql('+31101234123')
expect(PhonyRails.normalize_number('070-4157134')).to eql('+31704157134')
expect(PhonyRails.normalize_number('0031-70-4157134')).to eql('+31704157134')
expect(PhonyRails.normalize_number('+31-70-4157134')).to eql('+31704157134')
end

it 'allows default_country_code to be overridden' do
expect(PhonyRails.normalize_number('0322-69497', country_code: 'BE')).to eql('+3232269497')
expect(PhonyRails.normalize_number('+32 3 226 94 97', country_code: 'BE')).to eql('+3232269497')
expect(PhonyRails.normalize_number('0450 764 000', country_code: 'AU')).to eql('+61450764000')

expect(PhonyRails.normalize_number('0322-69497', default_country_code: 'BE')).to eql('+3232269497')
expect(PhonyRails.normalize_number('+32 3 226 94 97', default_country_code: 'BE')).to eql('+3232269497')
expect(PhonyRails.normalize_number('0450 764 000', default_country_code: 'AU')).to eql('+61450764000')
end

end
end

describe 'PhonyRails.plausible_number?' do
Expand Down Expand Up @@ -367,6 +392,24 @@ class NormalHome < ActiveRecord::Base
expect(Phony).to receive(:plausible?).twice.and_raise('unexpected error')
is_expected.not_to be_plausible_number normalizable_number, country_code: 'US'
end

context 'with default_country_code set' do

before { PhonyRails.default_country_code = 'FR' }
after { PhonyRails.default_country_code = nil }

it 'uses the default' do
is_expected.not_to be_plausible_number normalizable_number
is_expected.to be_plausible_number formatted_french_number_with_country_code
end

it 'allows default_country_code to be overridden' do
is_expected.not_to be_plausible_number empty_number, country_code: 'US'
is_expected.not_to be_plausible_number nil_number, country_code: 'US'
end

end

end

shared_examples_for 'model with PhonyRails' do
Expand Down

0 comments on commit 6465ad6

Please sign in to comment.