validates_phone_number 1.0.0 → 2.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.
- data/Gemfile +0 -2
- data/README.markdown +40 -16
- data/lib/validates_phone_number.rb +1 -2
- data/lib/validates_phone_number/formats.rb +7 -0
- data/lib/validates_phone_number/message.rb +1 -1
- data/lib/validates_phone_number/validator.rb +9 -1
- data/lib/validates_phone_number/version.rb +1 -1
- data/test/validates_phone_number/validator_test.rb +76 -21
- data/validates_phone_number.gemspec +0 -3
- metadata +13 -28
data/Gemfile
CHANGED
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
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
+
|
19
|
+
By default, both 10 and 7 digit numbers are valid.
|
20
|
+
|
21
|
+
## Options
|
18
22
|
|
19
23
|
### Message
|
20
24
|
|
21
|
-
|
25
|
+
Set the message that's added to the errors collection by using the
|
22
26
|
`message` option:
|
23
27
|
|
24
|
-
```
|
25
|
-
|
26
|
-
|
27
|
-
|
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
|
-
|
37
|
-
|
38
|
-
|
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
|
-
|
45
|
-
|
46
|
-
|
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
|
```
|
@@ -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
|
@@ -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
|
@@ -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
|
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
|
24
|
+
def test_invalidates
|
27
25
|
Person.validates :phone_number, :phone_number => true
|
28
|
-
@person.phone_number =
|
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
|
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
|
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
|
|
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:
|
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-
|
12
|
+
date: 2012-02-19 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|
16
|
-
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: *
|
24
|
+
version_requirements: *70269310105660
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rails
|
27
|
-
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: *
|
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
|