validates_phone_number 1.0.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -5,8 +5,6 @@ gemspec
5
5
  gem 'rails', '3.1.0'
6
6
  gem 'minitest', '2.10.0'
7
7
 
8
- gem 'phone', '1.1'
9
-
10
8
  group :active_record do
11
9
  gem 'sqlite3-ruby', :require => 'sqlite3'
12
10
  end
data/README.markdown CHANGED
@@ -10,21 +10,25 @@ phone numbers.
10
10
  Given a User model with a phone number attribute of `phone number`
11
11
  that's a string, see if a given record has a valid phone number like so:
12
12
 
13
+ ```ruby
14
+ class Person < ActiveRecord::Base
15
+ validates :mobile, :phone_number => true
16
+ end
13
17
  ```
14
- class Person < ActiveRecord::Base
15
- validates :mobile, :phone_number => true
16
- end
17
- ```
18
+
19
+ By default, both 10 and 7 digit numbers are valid.
20
+
21
+ ## Options
18
22
 
19
23
  ### Message
20
24
 
21
- Specify the message that's added to the errors collection by using the
25
+ Set the message that's added to the errors collection by using the
22
26
  `message` option:
23
27
 
24
- ```
25
- class Person < ActiveRecord::Base
26
- validates :mobile, :phone_number => {:message => "invalid and can only be attributable to human error"}
27
- end
28
+ ```ruby
29
+ class Person < ActiveRecord::Base
30
+ validates :mobile, :phone_number => {:message => "invalid and can only be attributable to human error"}
31
+ end
28
32
  ```
29
33
 
30
34
  ### Format/Match by Regular Expression
@@ -32,16 +36,36 @@ Specify the message that's added to the errors collection by using the
32
36
  You can specify that a number matches a regular expression by using the
33
37
  `format` option:
34
38
 
35
- ```
36
- class Person < ActiveRecord::Base
37
- validates :mobile, :phone_number => {:format => /\d{3}-\d{3}-\d{4}/}
38
- end
39
+ ```ruby
40
+ class Person < ActiveRecord::Base
41
+ validates :mobile, :phone_number => {:format => /\d{3}-\d{3}-\d{4}/}
42
+ end
39
43
  ```
40
44
 
41
45
  ### Allow Nil
42
46
 
47
+ ```ruby
48
+ class Person < ActiveRecord::Base
49
+ validates :mobile, :phone_number => {:allow_nil => true}
50
+ end
51
+ ```
52
+
53
+ ### Seven Digits
54
+
55
+ I.e. 555-5555
56
+
57
+ ```ruby
58
+ class Person < ActiveRecord::Base
59
+ validates :mobile, :phone_number => {:seven_digits => true}
60
+ end
61
+
43
62
  ```
44
- class Person < ActiveRecord::Base
45
- validates :mobile, :phone_number => {:allow_nil => true}
46
- end
63
+ ### Ten Digits
64
+
65
+ I.e. (555)-555-5555
66
+
67
+ ```ruby
68
+ class Person < ActiveRecord::Base
69
+ validates :mobile, :phone_number => {:ten_digits => true}
70
+ end
47
71
  ```
@@ -1,5 +1,4 @@
1
- require 'phone'
2
- Phoner::Phone.default_country_code = '1'
3
1
  require_relative "validates_phone_number/version"
4
2
  require_relative "validates_phone_number/message"
3
+ require_relative "validates_phone_number/formats"
5
4
  require_relative "validates_phone_number/validator"
@@ -0,0 +1,7 @@
1
+ module ValidatesPhoneNumber
2
+ module Formats
3
+ TEN_DIGITS = /^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/
4
+ SEVEN_DIGITS = /^(?:\(?([0-9]{3})\)?[-. ]?)?([0-9]{3})[-. ]?([0-9]{4})$/
5
+ LEADING_1 = /^(?:\+?1[-. ]?)?\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/
6
+ end
7
+ end
@@ -1,6 +1,6 @@
1
1
  module ValidatesPhoneNumber
2
2
  module Message
3
- DEFAULT_ERROR_MESSAGE = "%s is not a valid"
3
+ DEFAULT_ERROR_MESSAGE = "%s is not valid"
4
4
 
5
5
  private
6
6
 
@@ -3,19 +3,27 @@ require 'active_model/validator'
3
3
  module ValidatesPhoneNumber
4
4
  class Validator < ActiveModel::EachValidator
5
5
  include ValidatesPhoneNumber::Message
6
+ include ValidatesPhoneNumber::Formats
6
7
 
7
8
  def initialize options
9
+ @default = options.keys.size == 1
8
10
  @type = options.delete(:type) || :string
9
11
  @allow_nil = options.delete(:allow_nil)
10
12
  @format = options.delete(:format)
11
13
  @message = options.delete(:message)
14
+ @ten_digits = options.delete(:ten_digits)
15
+ @seven_digits = options.delete(:seven_digits)
16
+ @leading_1 = options.delete(:leading_1)
12
17
  super
13
18
  end
14
19
 
15
20
  def validate_each record, attr_name, value
16
21
  return if @allow_nil && value.nil?
17
- return if Phoner::Phone.valid? value
18
22
  return if value =~ @format
23
+ return if value =~ TEN_DIGITS if @ten_digits
24
+ return if value =~ SEVEN_DIGITS if @seven_digits
25
+ return if value =~ LEADING_1 if @leading_1
26
+ return if value =~ TEN_DIGITS || value =~ SEVEN_DIGITS if @default
19
27
  message = error_message_for value
20
28
  record.errors.add attr_name, message
21
29
  end
@@ -1,3 +1,3 @@
1
1
  module ValidatesPhoneNumber
2
- VERSION = "1.0.0"
2
+ VERSION = "2.0.0"
3
3
  end
@@ -10,49 +10,104 @@ class TestValidator < MiniTest::Unit::TestCase
10
10
  def test_model_validates_with_phone_number_option
11
11
  Person.validates :phone_number, :phone_number => true
12
12
  end
13
-
14
- def test_invalid_record_if_invalid_phone_number
15
- Person.validates :phone_number, :phone_number => true
16
- @person.phone_number = "423432432452"
17
- assert !@person.valid?
18
- end
19
13
 
20
- def test_valid_record_if_valid_phone_number
14
+ def test_validates_defaults
21
15
  Person.validates :phone_number, :phone_number => true
16
+
22
17
  @person.phone_number = "555-565-5703"
23
- assert @person.valid?
18
+ assert @person.valid?, @person.errors.full_messages
19
+
20
+ @person.phone_number = "565-5703"
21
+ assert @person.valid?, @person.errors.full_messages
24
22
  end
25
23
 
26
- def test_allow_nil_option_defaults_to_false
24
+ def test_invalidates
27
25
  Person.validates :phone_number, :phone_number => true
28
- @person.phone_number = nil
26
+ @person.phone_number = "423432432452"
29
27
  assert !@person.valid?
30
- end
31
-
32
- def test_nil_is_record_record_if_allow_nil
33
- Person.validates :phone_number, :phone_number => {:allow_nil => true}
34
- @person.phone_number = nil
35
- assert @person.valid?
36
- end
37
28
 
38
- def test_invalid_record_by_format_option
39
- Person.validates :phone_number, :phone_number => true
40
29
  @person.phone_number = "555^555^555^5555"
41
30
  assert !@person.valid?
42
31
  end
43
32
 
44
- def test_valid_record_by_format_option
33
+ def test_validates_with_format
45
34
  Person.validates :phone_number, :phone_number => {:format => /(\d+\^){3}\d+/}
46
35
  @person.phone_number = "555^555^555^5555"
47
36
  assert @person.valid?
48
37
  end
49
38
 
50
- def test_specify_message
39
+ def test_explicit_message
51
40
  Person.validates :phone_number, :phone_number => {:message => "invalid and can only be attributable to human error"}
52
41
  @person.phone_number = nil
53
42
  @person.valid?
54
43
  assert_equal 1, @person.errors.size
55
44
  assert_match /invalid and can only be attributable to human error/, @person.errors.full_messages.first
56
45
  end
46
+
47
+ def test_validates_international_number
48
+ Person.validates :phone_number, :phone_number => {:format => /(\d+\^){3}\d+/}
49
+ @person.phone_number = "555^555^555^5555"
50
+ assert @person.valid?
51
+ end
52
+
53
+ def test_validates_ten_digit_number
54
+ Person.validates :phone_number, :phone_number => {:ten_digits => true}
55
+ @person.phone_number = "(555)-555-5555"
56
+ assert @person.valid?
57
+
58
+ @person.phone_number = "(55)-555-5555"
59
+ assert !@person.valid?
60
+
61
+ @person.phone_number = "-(555)-555-5555"
62
+ assert !@person.valid?
63
+
64
+ @person.phone_number = "555-555-5555"
65
+ assert @person.valid?
66
+
67
+ @person.phone_number = "555.555.5555"
68
+ assert @person.valid?
69
+
70
+ @person.phone_number = "5555555555"
71
+ assert @person.valid?
72
+ end
73
+
74
+ def test_validates_seven_digit_number
75
+ Person.validates :phone_number, :phone_number => {:seven_digits => true}
76
+ @person.phone_number = "555-5555"
77
+ assert @person.valid?
78
+
79
+ @person.phone_number = "-55-5555"
80
+ assert !@person.valid?
81
+
82
+ @person.phone_number = "5555555"
83
+ assert @person.valid?
84
+
85
+ @person.phone_number = "555.5555"
86
+ assert @person.valid?
87
+ end
88
+
89
+ def test_validates_leading_1
90
+ Person.validates :phone_number, :phone_number => {:leading_1 => true}
91
+ @person.phone_number = "+1 (123) 456-7890"
92
+ assert @person.valid?
93
+
94
+ @person.phone_number = "1-123-456-7890"
95
+ assert @person.valid?
96
+
97
+ @person.phone_number = "2-123-456-7890"
98
+ assert !@person.valid?
99
+ end
100
+
101
+ def test_allow_nil_option_defaults_to_false
102
+ Person.validates :phone_number, :phone_number => true
103
+ @person.phone_number = nil
104
+ assert !@person.valid?
105
+ end
106
+
107
+ def test_allow_nil_validates_nil_phone_number
108
+ Person.validates :phone_number, :phone_number => {:allow_nil => true}
109
+ @person.phone_number = nil
110
+ assert @person.valid?
111
+ end
57
112
  end
58
113
 
@@ -20,7 +20,4 @@ Gem::Specification.new do |s|
20
20
 
21
21
  s.add_development_dependency "minitest", '2.10.0'
22
22
  s.add_development_dependency "rails", '3.1.0'
23
- s.add_development_dependency "phone", '1.1'
24
-
25
- s.add_runtime_dependency "phone", '1.1'
26
23
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: validates_phone_number
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-03 00:00:00.000000000Z
12
+ date: 2012-02-19 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: minitest
16
- requirement: &70335761603660 !ruby/object:Gem::Requirement
16
+ requirement: &70269310105660 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - =
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.10.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70335761603660
24
+ version_requirements: *70269310105660
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rails
27
- requirement: &70335761603140 !ruby/object:Gem::Requirement
27
+ requirement: &70269310105080 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - =
@@ -32,29 +32,7 @@ dependencies:
32
32
  version: 3.1.0
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70335761603140
36
- - !ruby/object:Gem::Dependency
37
- name: phone
38
- requirement: &70335761602660 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - =
42
- - !ruby/object:Gem::Version
43
- version: '1.1'
44
- type: :development
45
- prerelease: false
46
- version_requirements: *70335761602660
47
- - !ruby/object:Gem::Dependency
48
- name: phone
49
- requirement: &70335761602200 !ruby/object:Gem::Requirement
50
- none: false
51
- requirements:
52
- - - =
53
- - !ruby/object:Gem::Version
54
- version: '1.1'
55
- type: :runtime
56
- prerelease: false
57
- version_requirements: *70335761602200
35
+ version_requirements: *70269310105080
58
36
  description: Adds validation methods to ActiveModel for validating phone numbers.
59
37
  email:
60
38
  - t@travisjeffery.com
@@ -68,6 +46,7 @@ files:
68
46
  - README.markdown
69
47
  - Rakefile
70
48
  - lib/validates_phone_number.rb
49
+ - lib/validates_phone_number/formats.rb
71
50
  - lib/validates_phone_number/message.rb
72
51
  - lib/validates_phone_number/validator.rb
73
52
  - lib/validates_phone_number/version.rb
@@ -86,12 +65,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
86
65
  - - ! '>='
87
66
  - !ruby/object:Gem::Version
88
67
  version: '0'
68
+ segments:
69
+ - 0
70
+ hash: 3377125952189612186
89
71
  required_rubygems_version: !ruby/object:Gem::Requirement
90
72
  none: false
91
73
  requirements:
92
74
  - - ! '>='
93
75
  - !ruby/object:Gem::Version
94
76
  version: '0'
77
+ segments:
78
+ - 0
79
+ hash: 3377125952189612186
95
80
  requirements: []
96
81
  rubyforge_project: validates_phone_number
97
82
  rubygems_version: 1.8.10