activevalidators 1.8.1 → 1.9.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/.travis.yml +2 -2
- data/README.md +1 -1
- data/activevalidators.gemspec +1 -6
- data/lib/active_model/validations/email_validator.rb +11 -1
- data/test/validations/email_test.rb +56 -15
- metadata +77 -103
- data/lib/active_validators/version.rb +0 -4
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -16,7 +16,7 @@ In your models, the gem provides new validators like `email`, or `url`:
|
|
16
16
|
|
17
17
|
```ruby
|
18
18
|
class User
|
19
|
-
validates :email_address, :email => true
|
19
|
+
validates :email_address, :email => true # == :email => { :strict => false }
|
20
20
|
validates :link_url, :url => true
|
21
21
|
validates :user_phone, :phone => true
|
22
22
|
validates :password, :password => { :strength => :medium }
|
data/activevalidators.gemspec
CHANGED
@@ -1,11 +1,7 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
lib = File.expand_path('../lib/', __FILE__)
|
3
|
-
$:.unshift lib unless $:.include?(lib)
|
4
|
-
require 'active_validators/version'
|
5
|
-
|
6
2
|
Gem::Specification.new do |s|
|
7
3
|
s.name = "activevalidators"
|
8
|
-
s.version =
|
4
|
+
s.version = '1.9.0'
|
9
5
|
s.platform = Gem::Platform::RUBY
|
10
6
|
s.authors = ["Franck Verrot", "Paco Guzmán", "Oriol Gual", "Garrett Bjerkhoel", "Renato Riccieri Santos Zannon", "Brian Moseley"]
|
11
7
|
s.email = ["franck@verrot.fr"]
|
@@ -22,6 +18,5 @@ Gem::Specification.new do |s|
|
|
22
18
|
|
23
19
|
s.files = `git ls-files`.split("\n")
|
24
20
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
25
|
-
s.require_paths = ["lib"]
|
26
21
|
end
|
27
22
|
|
@@ -2,10 +2,20 @@ require 'mail'
|
|
2
2
|
module ActiveModel
|
3
3
|
module Validations
|
4
4
|
class EmailValidator < EachValidator
|
5
|
+
EMAIL_REGEXP = %r{\A[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}\z}
|
6
|
+
|
5
7
|
def validate_each(record,attribute,value)
|
8
|
+
opts = options.dup
|
9
|
+
opts[:strict] ||= false
|
10
|
+
|
6
11
|
begin
|
7
12
|
address = Mail::Address.new(value)
|
8
|
-
valid
|
13
|
+
valid = address.domain &&
|
14
|
+
value.include?(address.address) &&
|
15
|
+
(
|
16
|
+
!opts[:strict] ||
|
17
|
+
address.domain.match(EMAIL_REGEXP)
|
18
|
+
)
|
9
19
|
rescue Mail::Field::ParseError
|
10
20
|
valid = false
|
11
21
|
end
|
@@ -1,42 +1,83 @@
|
|
1
1
|
require 'test_helper.rb'
|
2
2
|
|
3
3
|
describe "Email Validation" do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
describe "strict: true" do
|
5
|
+
|
6
|
+
it "accepts valid emails" do
|
7
|
+
subject = build_email_record({:email => 'franck@verrot.fr'}, {:strict => true})
|
8
|
+
subject.valid?.must_equal true
|
9
|
+
subject.errors.size.must_equal 0
|
10
|
+
end
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
12
|
+
it "accepts valid emails" do
|
13
|
+
subject = build_email_record({:email => 'franck@edu.verrot-gouv.fr'}, {:strict => true})
|
14
|
+
subject.valid?.must_equal true
|
15
|
+
subject.errors.size.must_equal 0
|
16
|
+
end
|
17
|
+
|
18
|
+
it "accepts complete emails" do
|
19
|
+
subject = build_email_record({:email => 'Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>'}, {:strict => true})
|
20
|
+
subject.valid?.must_equal true
|
21
|
+
subject.errors.size.must_equal 0
|
22
|
+
end
|
23
|
+
|
24
|
+
it "accepts complete emails" do
|
25
|
+
subject = build_email_record({:email => 'franck@verrotfr'}, {:strict => true})
|
26
|
+
subject.valid?.must_equal false
|
27
|
+
subject.errors.size.must_equal 1
|
28
|
+
end
|
14
29
|
end
|
15
|
-
|
30
|
+
|
31
|
+
describe "strict: false (default)" do
|
32
|
+
it "accepts valid emails" do
|
33
|
+
subject = build_email_record :email => 'franck@verrot.fr'
|
34
|
+
subject.valid?.must_equal true
|
35
|
+
subject.errors.size.must_equal 0
|
36
|
+
end
|
37
|
+
|
38
|
+
it "accepts valid emails" do
|
39
|
+
subject = build_email_record :email => 'franck@edu.verrot-gouv.fr'
|
40
|
+
subject.valid?.must_equal true
|
41
|
+
subject.errors.size.must_equal 0
|
42
|
+
end
|
43
|
+
|
44
|
+
it "accepts complete emails" do
|
45
|
+
subject = build_email_record :email => 'Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>'
|
46
|
+
subject.valid?.must_equal true
|
47
|
+
subject.errors.size.must_equal 0
|
48
|
+
end
|
49
|
+
|
50
|
+
it "accepts complete emails" do
|
51
|
+
subject = build_email_record :email => 'franck@verrotfr'
|
52
|
+
subject.valid?.must_equal true
|
53
|
+
subject.errors.size.must_equal 0
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
16
57
|
describe "for invalid emails" do
|
17
58
|
it "rejects invalid emails" do
|
18
59
|
subject = build_email_record :email => 'franck.fr'
|
19
60
|
subject.valid?.must_equal false
|
20
61
|
subject.errors.size.must_equal 1
|
21
62
|
end
|
22
|
-
|
63
|
+
|
23
64
|
it 'rejects local emails' do
|
24
65
|
subject = build_email_record :email => 'franck.fr'
|
25
66
|
subject.email = 'franck'
|
26
67
|
subject.valid?.must_equal false
|
27
68
|
subject.errors.size.must_equal 1
|
28
69
|
end
|
29
|
-
|
30
|
-
it
|
70
|
+
|
71
|
+
it 'generates an error message of type invalid' do
|
31
72
|
subject = build_email_record :email => 'franck.fr'
|
32
73
|
subject.valid?.must_equal false
|
33
74
|
subject.errors[:email].include?(subject.errors.generate_message(:email, :invalid)).must_equal true
|
34
75
|
end
|
35
76
|
end
|
36
77
|
|
37
|
-
def build_email_record(attrs = {})
|
78
|
+
def build_email_record(attrs = {}, opts = {})
|
38
79
|
TestRecord.reset_callbacks(:validate)
|
39
|
-
TestRecord.validates :email, :email =>
|
80
|
+
TestRecord.validates :email, :email => { :strict => opts[:strict] }
|
40
81
|
TestRecord.new attrs
|
41
82
|
end
|
42
83
|
end
|
metadata
CHANGED
@@ -1,16 +1,12 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: activevalidators
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 1
|
7
|
-
- 8
|
8
|
-
- 1
|
9
|
-
version: 1.8.1
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.9.0
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Franck Verrot
|
13
|
-
-
|
9
|
+
- Paco Guzmán
|
14
10
|
- Oriol Gual
|
15
11
|
- Garrett Bjerkhoel
|
16
12
|
- Renato Riccieri Santos Zannon
|
@@ -18,96 +14,81 @@ authors:
|
|
18
14
|
autorequire:
|
19
15
|
bindir: bin
|
20
16
|
cert_chain: []
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
dependencies:
|
25
|
-
- !ruby/object:Gem::Dependency
|
17
|
+
date: 2012-04-07 00:00:00.000000000 Z
|
18
|
+
dependencies:
|
19
|
+
- !ruby/object:Gem::Dependency
|
26
20
|
name: bundler
|
27
|
-
|
28
|
-
|
29
|
-
requirements:
|
30
|
-
- -
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
|
33
|
-
- 0
|
34
|
-
version: "0"
|
21
|
+
requirement: &70152419540700 !ruby/object:Gem::Requirement
|
22
|
+
none: false
|
23
|
+
requirements:
|
24
|
+
- - ! '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
35
27
|
type: :development
|
36
|
-
version_requirements: *id001
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: minitest
|
39
28
|
prerelease: false
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
29
|
+
version_requirements: *70152419540700
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: minitest
|
32
|
+
requirement: &70152419540020 !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
47
38
|
type: :development
|
48
|
-
version_requirements: *id002
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
name: rake
|
51
39
|
prerelease: false
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
40
|
+
version_requirements: *70152419540020
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: &70152419506560 !ruby/object:Gem::Requirement
|
44
|
+
none: false
|
45
|
+
requirements:
|
46
|
+
- - ! '>='
|
47
|
+
- !ruby/object:Gem::Version
|
60
48
|
version: 0.8.7
|
61
49
|
type: :runtime
|
62
|
-
version_requirements: *id003
|
63
|
-
- !ruby/object:Gem::Dependency
|
64
|
-
name: activemodel
|
65
50
|
prerelease: false
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
51
|
+
version_requirements: *70152419506560
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
name: activemodel
|
54
|
+
requirement: &70152419506060 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ! '>='
|
58
|
+
- !ruby/object:Gem::Version
|
74
59
|
version: 3.0.0
|
75
60
|
type: :runtime
|
76
|
-
version_requirements: *id004
|
77
|
-
- !ruby/object:Gem::Dependency
|
78
|
-
name: mail
|
79
61
|
prerelease: false
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
62
|
+
version_requirements: *70152419506060
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: mail
|
65
|
+
requirement: &70152419505620 !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ! '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
87
71
|
type: :runtime
|
88
|
-
version_requirements: *id005
|
89
|
-
- !ruby/object:Gem::Dependency
|
90
|
-
name: date_validator
|
91
72
|
prerelease: false
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
73
|
+
version_requirements: *70152419505620
|
74
|
+
- !ruby/object:Gem::Dependency
|
75
|
+
name: date_validator
|
76
|
+
requirement: &70152419504580 !ruby/object:Gem::Requirement
|
77
|
+
none: false
|
78
|
+
requirements:
|
79
|
+
- - ! '>='
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
99
82
|
type: :runtime
|
100
|
-
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: *70152419504580
|
101
85
|
description: ActiveValidators is a collection of ActiveModel/ActiveRecord validations
|
102
|
-
email:
|
86
|
+
email:
|
103
87
|
- franck@verrot.fr
|
104
88
|
executables: []
|
105
|
-
|
106
89
|
extensions: []
|
107
|
-
|
108
90
|
extra_rdoc_files: []
|
109
|
-
|
110
|
-
files:
|
91
|
+
files:
|
111
92
|
- .gitignore
|
112
93
|
- .travis.yml
|
113
94
|
- Gemfile
|
@@ -126,7 +107,6 @@ files:
|
|
126
107
|
- lib/active_model/validations/tracking_number_validator.rb
|
127
108
|
- lib/active_model/validations/twitter_validator.rb
|
128
109
|
- lib/active_model/validations/url_validator.rb
|
129
|
-
- lib/active_validators/version.rb
|
130
110
|
- lib/activevalidators.rb
|
131
111
|
- test/test_helper.rb
|
132
112
|
- test/validations/credit_card_test.rb
|
@@ -141,37 +121,31 @@ files:
|
|
141
121
|
- test/validations/tracking_number_test.rb
|
142
122
|
- test/validations/twitter_test.rb
|
143
123
|
- test/validations/url_test.rb
|
144
|
-
has_rdoc: true
|
145
124
|
homepage: http://github.com/cesario/activevalidators
|
146
125
|
licenses: []
|
147
|
-
|
148
126
|
post_install_message:
|
149
127
|
rdoc_options: []
|
150
|
-
|
151
|
-
require_paths:
|
128
|
+
require_paths:
|
152
129
|
- lib
|
153
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
requirements:
|
162
|
-
- -
|
163
|
-
- !ruby/object:Gem::Version
|
164
|
-
|
165
|
-
- 0
|
166
|
-
version: "0"
|
130
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
131
|
+
none: false
|
132
|
+
requirements:
|
133
|
+
- - ! '>='
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '0'
|
136
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
167
142
|
requirements: []
|
168
|
-
|
169
143
|
rubyforge_project:
|
170
|
-
rubygems_version: 1.
|
144
|
+
rubygems_version: 1.8.11
|
171
145
|
signing_key:
|
172
146
|
specification_version: 3
|
173
147
|
summary: Collection of ActiveModel/ActiveRecord validations
|
174
|
-
test_files:
|
148
|
+
test_files:
|
175
149
|
- test/test_helper.rb
|
176
150
|
- test/validations/credit_card_test.rb
|
177
151
|
- test/validations/date_test.rb
|