validates_telephone 0.2.1 → 1.0.0

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.
Files changed (34) hide show
  1. data/.travis.yml +4 -0
  2. data/LICENSE +20 -0
  3. data/README.rdoc +28 -23
  4. data/lib/validates_telephone/formatter.rb +21 -0
  5. data/lib/validates_telephone/regex.rb +15 -0
  6. data/lib/validates_telephone/remarkable/require_a_valid_telephone_matcher.rb +43 -0
  7. data/lib/validates_telephone/shoulda-matchers/require_a_valid_telephone_matcher.rb +47 -0
  8. data/lib/validates_telephone/telephone_validator.rb +7 -0
  9. data/lib/validates_telephone/validator.rb +18 -0
  10. data/lib/validates_telephone/version.rb +1 -1
  11. data/lib/validates_telephone.rb +10 -10
  12. data/spec/fake_app/db/create_users.rb +4 -6
  13. data/spec/fake_app/user.rb +3 -5
  14. data/spec/spec_helper.rb +1 -2
  15. data/spec/validates_telephone/formatter_spec.rb +49 -0
  16. data/spec/validates_telephone/regex_spec.rb +51 -0
  17. data/spec/validates_telephone/remarkable/require_a_valid_telephone_matcher_spec.rb +40 -0
  18. data/spec/validates_telephone/shoulda-matchers/require_a_valid_telephone_matcher_spec.rb +40 -0
  19. data/spec/validates_telephone/validator_spec.rb +145 -0
  20. data/spec/validates_telephone_spec.rb +75 -14
  21. data/validates_telephone.gemspec +0 -2
  22. metadata +60 -29
  23. data/lib/validates_telephone/remarkable/validate_as_br_telephone_matcher.rb +0 -34
  24. data/lib/validates_telephone/remarkable/validate_as_usa_telephone_matcher.rb +0 -34
  25. data/lib/validates_telephone/shoulda-matchers/validate_as_br_telephone_matcher.rb +0 -45
  26. data/lib/validates_telephone/shoulda-matchers/validate_as_usa_telephone_matcher.rb +0 -45
  27. data/lib/validates_telephone/telephone.rb +0 -34
  28. data/spec/fake_app/admin.rb +0 -2
  29. data/spec/fake_app/db/create_admins.rb +0 -11
  30. data/spec/remarkable/validate_as_br_telephone_matcher_spec.rb +0 -26
  31. data/spec/remarkable/validate_as_usa_telephone_matcher_spec.rb +0 -26
  32. data/spec/shoulda-matchers/validate_as_br_telephone_matcher_spec.rb +0 -26
  33. data/spec/shoulda-matchers/validate_as_usa_telephone_matcher_spec.rb +0 -26
  34. data/spec/validates_telephone/telephone_spec.rb +0 -103
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ rvm:
2
+ - 1.8.7
3
+ - 1.9.2
4
+ - 1.9.3
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ (The MIT License)
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ 'Software'), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
18
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
20
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc CHANGED
@@ -2,42 +2,47 @@
2
2
 
3
3
  Rails gem to validate Telephone.
4
4
 
5
- == Install
5
+ ## Installation
6
6
 
7
- gem install validates_telephone
7
+ Add this line to your application's Gemfile:
8
8
 
9
- == Usage
9
+ gem 'validates_telephone'
10
10
 
11
- Lets say you have a model with "telephone" string column that you want to be a valid telephone for Brazil. Just add this to your model:
11
+ And then execute:
12
12
 
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install validates_telephone
18
+
19
+ == Basic Usage
20
+
21
+ It will accept a valid telephone from Brasil or United States by default:
22
+
23
+ ```ruby
13
24
  class User < ActiveRecord::Base
14
25
  validates :telephone, :telephone => true
15
26
  end
27
+ ```
16
28
 
17
- In case you want it to be a valid telephone for United States, just pass the locale as en:
29
+ In case you want it to be a valid telephone for just one place at a time, pass the locale:
18
30
 
31
+ ```ruby
19
32
  class User < ActiveRecord::Base
20
- validates :telephone, :telephone => { :locale => :usa }
33
+ validates :br_telephone, :telephone => { :locale => :br }
34
+ validates :usa_telephone, :telephone => { :locale => :usa }
21
35
  end
36
+ ```
22
37
 
23
38
  == Test
24
39
 
25
- This gem has matchers for shoulda-matchers and remarkable.
26
-
27
- If you want the matchers for Brazil and you are using shoulda-matchers, add this line to your spec_helper.rb :
28
- require "validates_telephone/shoulda-matchers/validate_as_br_telephone_matcher"
29
- If you want the matchers for Brazil and you are using remarkable, add this line to your spec_helper.rb :
30
- require "validates_telephone/remarkable/validate_as_br_telephone_matcher"
31
-
32
- If you want the matchers for United States and you are using shoulda-matchers, add this line to your spec_helper.rb :
33
- require "validates_telephone/shoulda-matchers/validate_as_usa_telephone_matcher"
34
- If you want the matchers for United States and you are using remarkable, add this line to your spec_helper.rb :
35
- require "validates_telephone/remarkable/validate_as_usa_telephone_matcher"
36
-
37
- === How?
38
-
39
- You should use validates_as_telephone(:attribute) just like any other shoulda or remarkable matcher.
40
+ This gem has builtin matchers for shoulda-matchers and remarkable.
40
41
 
41
- == Future
42
+ == Contributing
42
43
 
43
- Add Support for other countries. For now it only supports Brazil and United States telephones.
44
+ 1. Fork it
45
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
46
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
47
+ 4. Push to the branch (`git push origin my-new-feature`)
48
+ 5. Create new Pull Request
@@ -0,0 +1,21 @@
1
+ module ValidatesTelephone
2
+ module Formatter
3
+ def self.br(number)
4
+ return nil if number.nil?
5
+ number.gsub(/[\(\)-]/, "") =~ /^(\d{2})(\d{4})(\d{4})$/
6
+ return number if $1.nil?
7
+ "(#{$1})#{$2}-#{$3}"
8
+ end
9
+
10
+ def self.usa(number)
11
+ return nil if number.nil?
12
+ number.gsub(/[\(\)-]/, "") =~ /^(\d{3})(\d{3})(\d{4})$/
13
+ return number if $1.nil?
14
+ "(#{$1})#{$2}-#{$3}"
15
+ end
16
+
17
+ def self.any(number)
18
+ number
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,15 @@
1
+ module ValidatesTelephone
2
+ module Regex
3
+ def self.br(number)
4
+ number =~ /^(\(?\d{2}\)?)(\d{4})-?(\d{4})$/
5
+ end
6
+
7
+ def self.usa(number)
8
+ number =~ /^(\(?[^2-9]\d{2}\)?)(\d{3})-?(\d{4})$/
9
+ end
10
+
11
+ def self.any(number)
12
+ number =~ /^(\(\d{2}\))(\d{4})-(\d{4})|(\([^2-9]\d{2}\))(\d{3})-(\d{4})$/
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,43 @@
1
+ require 'remarkable/active_model'
2
+
3
+ module Remarkable
4
+ module ActiveModel
5
+ module Matchers
6
+ class RequireAValidTelephoneMatcher < Remarkable::ActiveModel::Base
7
+ arguments :telephone
8
+
9
+ optional :locale
10
+
11
+ collection_assertions :telephone_valid?, :telephone_invalid?
12
+
13
+ protected
14
+
15
+ def telephone_valid?
16
+ return allows_value_of("(111)222-3333") if @options[:locale] == :usa
17
+ return allows_value_of("(11)2222-3333") if @options[:locale] == :br
18
+ allows_value_of("(111)222-3333") and allows_value_of("(11)2222-3333")
19
+ end
20
+
21
+ def telephone_invalid?
22
+ return (disallows_value_of("123456") and disallows_value_of("(11)2222-3333")) if @options[:locale] == :usa
23
+ return (disallows_value_of("123456") and disallows_value_of("(111)222-3333")) if @options[:locale] == :br
24
+ disallows_value_of("123456")
25
+ end
26
+
27
+ def allows_value_of(telephone)
28
+ @subject.telephone = telephone
29
+ @subject.valid?.errors[:telephone].should be_blank
30
+ end
31
+
32
+ def disallows_value_of(telephone)
33
+ @subject.telephone = telephone
34
+ @subject.valid?.errors[:telephone].should == ['is invalid']
35
+ end
36
+ end
37
+
38
+ def require_a_valid_telephone(*args, &block)
39
+ RequireAValidTelephoneMatcher.new(*args, &block).spec(self)
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,47 @@
1
+ require "shoulda-matchers"
2
+
3
+ module Shoulda
4
+ module Matchers
5
+ module ActiveModel
6
+ def require_a_valid_telephone(attr = :telephone)
7
+ RequireAValidTelephoneMatcher.new(attr)
8
+ end
9
+
10
+ class RequireAValidTelephoneMatcher< ValidationMatcher
11
+ def initialize(attribute)
12
+ @attribute = attribute
13
+ @options = {}
14
+ end
15
+
16
+ def from(locale)
17
+ @options[:locale] = locale
18
+ self
19
+ end
20
+
21
+ def description
22
+ "require #{@attribute} to be a valid telephone number"
23
+ end
24
+
25
+ def matches?(subject)
26
+ super(subject)
27
+
28
+ disallows_invalid_value and allows_valid_value
29
+ end
30
+
31
+ private
32
+
33
+ def disallows_invalid_value
34
+ return (disallows_value_of("123456") and disallows_value_of("(11)2222-3333")) if @options[:locale] == :usa
35
+ return (disallows_value_of("123456") and disallows_value_of("(111)222-3333")) if @options[:locale] == :br
36
+ disallows_value_of("123456")
37
+ end
38
+
39
+ def allows_valid_value
40
+ return allows_value_of("(111)222-3333") if @options[:locale] == :usa
41
+ return allows_value_of("(11)2222-3333") if @options[:locale] == :br
42
+ allows_value_of("(111)222-3333") and allows_value_of("(11)2222-3333")
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,7 @@
1
+ class TelephoneValidator < ActiveModel::EachValidator
2
+ def validate_each(record, attribute, value)
3
+ key = :"activerecord.errors.models.#{record.class.name.downcase}.attributes.#{attribute.to_s}.invalid"
4
+ locale = (options[:locale] or :any)
5
+ record.errors[attribute] << I18n.t(key, :default => :"activerecord.errors.messages.invalid") unless ValidatesTelephone::Validator.new(value, locale).valid?
6
+ end
7
+ end
@@ -0,0 +1,18 @@
1
+ module ValidatesTelephone
2
+ class Validator
3
+ def initialize(number, locale = :any)
4
+ @number = number
5
+ @match = ValidatesTelephone::Regex.send(locale, @number)
6
+ @number = ValidatesTelephone::Formatter.send(locale, @number)
7
+ end
8
+
9
+ def valid?
10
+ return true if @number.nil?
11
+ @match
12
+ end
13
+
14
+ def number
15
+ @number
16
+ end
17
+ end
18
+ end
@@ -1,3 +1,3 @@
1
1
  module ValidatesTelephone
2
- VERSION = "0.2.1"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -1,12 +1,12 @@
1
- require "active_model"
2
- require "validates_telephone/telephone"
1
+ #Validator
2
+ require "validates_telephone/telephone_validator"
3
3
 
4
- class TelephoneValidator < ActiveModel::EachValidator
5
- def validate_each(record, attribute, value)
6
- if options[:locale].nil?
7
- record.errors[attribute] << I18n.t("errors.messages.invalid") unless Telephone.new(value, :br).valid?
8
- else
9
- record.errors[attribute] << I18n.t("errors.messages.invalid") unless Telephone.new(value, options[:location]).valid?
10
- end
11
- end
4
+ #Rspec Matchers
5
+ require "validates_telephone/shoulda-matchers/require_a_valid_telephone_matcher" if defined?(::Shoulda)
6
+ require "validates_telephone/remarkable/require_a_valid_telephone_matcher" if defined?(::Remarkable)
7
+
8
+ module ValidatesTelephone
9
+ autoload :Validator, "validates_telephone/validator"
10
+ autoload :Regex, "validates_telephone/regex"
11
+ autoload :Formatter, "validates_telephone/formatter"
12
12
  end
@@ -1,15 +1,13 @@
1
1
  class CreateUsers < ActiveRecord::Migration
2
2
  def self.up
3
- create_table :br_users do |u|
4
- u.string :telephone
5
- end
6
- create_table :en_users do |u|
3
+ create_table :users do |u|
7
4
  u.string :telephone
5
+ u.string :br_telephone
6
+ u.string :usa_telephone
8
7
  end
9
8
  end
10
9
 
11
10
  def self.down
12
- drop_table :br_users
13
- drop_table :en_users
11
+ drop_table :users
14
12
  end
15
13
  end
@@ -1,7 +1,5 @@
1
- class BrUser < ActiveRecord::Base
1
+ class User < ActiveRecord::Base
2
2
  validates :telephone, :telephone => true
3
- end
4
-
5
- class EnUser < ActiveRecord::Base
6
- validates :telephone, :telephone => { :locale => :usa }
3
+ validates :br_telephone, :telephone => { :locale => :br }
4
+ validates :usa_telephone, :telephone => { :locale => :usa }
7
5
  end
data/spec/spec_helper.rb CHANGED
@@ -7,5 +7,4 @@ Dir.glob(File.dirname(__FILE__) + "/fake_app/**/*.rb").each { |file| require fil
7
7
 
8
8
  ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
9
9
 
10
- CreateUsers.migrate(:up)
11
- CreateAdmins.migrate(:up)
10
+ CreateUsers.migrate(:up)
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ describe ValidatesTelephone::Formatter do
4
+ context "#br" do
5
+ context "with a nil value" do
6
+ it "should return nil" do
7
+ ValidatesTelephone::Formatter.br(nil).should be_nil
8
+ end
9
+ end
10
+
11
+ context "with a valid number" do
12
+ it "should return it formatted" do
13
+ ValidatesTelephone::Formatter.br("1111111111").should == "(11)1111-1111"
14
+ end
15
+ end
16
+
17
+ context "with an invalid number" do
18
+ it "should return as it was" do
19
+ ValidatesTelephone::Formatter.br("11111111").should == "11111111"
20
+ end
21
+ end
22
+ end
23
+
24
+ context "#usa" do
25
+ context "with a nil value" do
26
+ it "should return nil" do
27
+ ValidatesTelephone::Formatter.usa(nil).should be_nil
28
+ end
29
+ end
30
+
31
+ context "with a valid number" do
32
+ it "should return it formatted" do
33
+ ValidatesTelephone::Formatter.usa("1111111111").should == "(111)111-1111"
34
+ end
35
+ end
36
+
37
+ context "with an invalid number" do
38
+ it "should return as it was" do
39
+ ValidatesTelephone::Formatter.usa("11111111").should == "11111111"
40
+ end
41
+ end
42
+ end
43
+
44
+ context "#any" do
45
+ it "should always return the number as it was" do
46
+ ValidatesTelephone::Formatter.any("11111").should == "11111"
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ describe ValidatesTelephone::Regex do
4
+ context "#br" do
5
+ context "with a valid number" do
6
+ it "should return true" do
7
+ ValidatesTelephone::Regex.br("(11)1111-1111").should be_true
8
+ end
9
+ end
10
+
11
+ context "with an invalid number" do
12
+ it "should return false" do
13
+ ValidatesTelephone::Regex.br("11111111").should be_false
14
+ end
15
+ end
16
+ end
17
+
18
+ context "#usa" do
19
+ context "with a valid number" do
20
+ it "should return true" do
21
+ ValidatesTelephone::Regex.usa("(111)111-1111").should == be_true
22
+ end
23
+ end
24
+
25
+ context "with an invalid number" do
26
+ it "should return false" do
27
+ ValidatesTelephone::Regex.usa("11111111").should be_false
28
+ end
29
+ end
30
+ end
31
+
32
+ context "#any" do
33
+ context "with a valid number from United States" do
34
+ it "should return true" do
35
+ ValidatesTelephone::Regex.any("(111)111-1111").should == be_true
36
+ end
37
+ end
38
+
39
+ context "with a valid number from Brazil" do
40
+ it "should return true" do
41
+ ValidatesTelephone::Regex.any("(11)1111-1111").should == be_true
42
+ end
43
+ end
44
+
45
+ context "with an invalid number" do
46
+ it "should return nil" do
47
+ ValidatesTelephone::Regex.any("11111111").should be_false
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+ require 'remarkable/active_model'
3
+
4
+ describe Remarkable::ActiveModel::Matchers::RequireAValidTelephoneMatcher do
5
+ before :each do
6
+ @user = User.new
7
+ end
8
+
9
+ it "should accept on telephone" do
10
+ @user.should require_a_valid_telephone(:telephone)
11
+ end
12
+
13
+ it "should accept without a specified attribute" do
14
+ @user.should require_a_valid_telephone
15
+ end
16
+
17
+ it "should reject on br_telephone" do
18
+ @user.should_not require_a_valid_telephone(:br_telephone)
19
+ end
20
+
21
+ context "with :br as locale" do
22
+ it "should accept on br_telephone" do
23
+ @user.should require_a_valid_telephone(:br_telephone).from(:br)
24
+ end
25
+
26
+ it "should reject on usa_telephone" do
27
+ @user.should_not require_a_valid_telephone(:usa_telephone).from(:br)
28
+ end
29
+ end
30
+
31
+ context "with :usa as locale" do
32
+ it "should accept on usa_telephone" do
33
+ @user.should require_a_valid_telephone(:usa_telephone).from(:usa)
34
+ end
35
+
36
+ it "should reject on br_telephone" do
37
+ @user.should_not require_a_valid_telephone(:br_telephone).from(:usa)
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+ require 'shoulda-matchers'
3
+
4
+ describe Shoulda::Matchers::ActiveModel::RequireAValidTelephoneMatcher do
5
+ before :each do
6
+ @user = User.new
7
+ end
8
+
9
+ it "should accept on telephone" do
10
+ @user.should require_a_valid_telephone(:telephone)
11
+ end
12
+
13
+ it "should accept without a specified attribute" do
14
+ @user.should require_a_valid_telephone
15
+ end
16
+
17
+ it "should reject on br_telephone" do
18
+ @user.should_not require_a_valid_telephone(:br_telephone)
19
+ end
20
+
21
+ context "with :br as locale" do
22
+ it "should accept on br_telephone" do
23
+ @user.should require_a_valid_telephone(:br_telephone).from(:br)
24
+ end
25
+
26
+ it "should reject on usa_telephone" do
27
+ @user.should_not require_a_valid_telephone(:usa_telephone).from(:br)
28
+ end
29
+ end
30
+
31
+ context "with :usa as locale" do
32
+ it "should accept on usa_telephone" do
33
+ @user.should require_a_valid_telephone(:usa_telephone).from(:usa)
34
+ end
35
+
36
+ it "should reject on br_telephone" do
37
+ @user.should_not require_a_valid_telephone(:br_telephone).from(:usa)
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,145 @@
1
+ require 'spec_helper'
2
+
3
+ describe ValidatesTelephone::Validator do
4
+ context "with br as locale" do
5
+ context "should be invalid with" do
6
+ it "blank number" do
7
+ ValidatesTelephone::Validator.new('', :br).should_not be_valid
8
+ end
9
+
10
+ it "123456 as number" do
11
+ ValidatesTelephone::Validator.new('123456', :br).should_not be_valid
12
+ end
13
+
14
+ it "12345678910 as number" do
15
+ ValidatesTelephone::Validator.new('12345678910', :br).should_not be_valid
16
+ end
17
+ end
18
+
19
+ context "should be valid with" do
20
+ it "nil as number" do
21
+ ValidatesTelephone::Validator.new(nil, :br).should be_valid
22
+ end
23
+
24
+ it "1111111111 as number" do
25
+ ValidatesTelephone::Validator.new('1111111111', :br).should be_valid
26
+ end
27
+
28
+ it "(11)11111111 as number" do
29
+ ValidatesTelephone::Validator.new('(11)11111111', :br).should be_valid
30
+ end
31
+
32
+ it "111111-1111 as number" do
33
+ ValidatesTelephone::Validator.new('111111-1111', :br).should be_valid
34
+ end
35
+
36
+ it "(11)1111-1111 as number" do
37
+ ValidatesTelephone::Validator.new('(11)1111-1111', :br).should be_valid
38
+ end
39
+ end
40
+
41
+ context "with a valid value" do
42
+ it "should return it formatted" do
43
+ ValidatesTelephone::Validator.new('1111111111', :br).number.should == '(11)1111-1111'
44
+ end
45
+ end
46
+
47
+ context "with an invalid value" do
48
+ it "should return as it was" do
49
+ ValidatesTelephone::Validator.new('123456', :br).number.should == '123456'
50
+ end
51
+ end
52
+ end
53
+
54
+ context "with usa as locale" do
55
+ context "should be invalid with" do
56
+ it "blank number" do
57
+ ValidatesTelephone::Validator.new('', :usa).should_not be_valid
58
+ end
59
+
60
+ it "123456 as number" do
61
+ ValidatesTelephone::Validator.new('123456', :usa).should_not be_valid
62
+ end
63
+
64
+ it "12345678910 as number" do
65
+ ValidatesTelephone::Validator.new('12345678910', :usa).should_not be_valid
66
+ end
67
+ end
68
+
69
+ context "should be valid with" do
70
+ it "nil as number" do
71
+ ValidatesTelephone::Validator.new(nil, :usa).should be_valid
72
+ end
73
+
74
+ it "1111111111 as number" do
75
+ ValidatesTelephone::Validator.new('1111111111', :usa).should be_valid
76
+ end
77
+
78
+ it "(11)11111111 as number" do
79
+ ValidatesTelephone::Validator.new('(111)1111111', :usa).should be_valid
80
+ end
81
+
82
+ it "111111-1111 as number" do
83
+ ValidatesTelephone::Validator.new('111111-1111', :usa).should be_valid
84
+ end
85
+
86
+ it "(111)111-1111 as number" do
87
+ ValidatesTelephone::Validator.new('(111)111-1111', :usa).should be_valid
88
+ end
89
+ end
90
+
91
+ context "with a valid value" do
92
+ it "should return it formatted" do
93
+ ValidatesTelephone::Validator.new('1111111111', :usa).number.should == '(111)111-1111'
94
+ end
95
+ end
96
+
97
+ context "with an invalid value" do
98
+ it "should return as it was" do
99
+ ValidatesTelephone::Validator.new('123456', :usa).number.should == '123456'
100
+ end
101
+ end
102
+ end
103
+
104
+ context "without locale" do
105
+ context "should be invalid with" do
106
+ it "blank number" do
107
+ ValidatesTelephone::Validator.new('').should_not be_valid
108
+ end
109
+
110
+ it "123456 as number" do
111
+ ValidatesTelephone::Validator.new('123456').should_not be_valid
112
+ end
113
+
114
+ it "12345678910 as number" do
115
+ ValidatesTelephone::Validator.new('12345678910').should_not be_valid
116
+ end
117
+
118
+ it "1111111111 as number" do
119
+ ValidatesTelephone::Validator.new('1111111111').should_not be_valid
120
+ end
121
+
122
+ it "(11)11111111 as number" do
123
+ ValidatesTelephone::Validator.new('(111)1111111').should_not be_valid
124
+ end
125
+
126
+ it "111111-1111 as number" do
127
+ ValidatesTelephone::Validator.new('111111-1111').should_not be_valid
128
+ end
129
+ end
130
+
131
+ context "should be valid with" do
132
+ it "nil as number" do
133
+ ValidatesTelephone::Validator.new(nil).should be_valid
134
+ end
135
+
136
+ it "(11)1111-1111 as number" do
137
+ ValidatesTelephone::Validator.new('(11)1111-1111').should be_valid
138
+ end
139
+
140
+ it "(111)111-1111 as number" do
141
+ ValidatesTelephone::Validator.new('(111)111-1111').should be_valid
142
+ end
143
+ end
144
+ end
145
+ end