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 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