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 CHANGED
@@ -5,6 +5,6 @@ rvm:
5
5
  - 1.9.3
6
6
  - ruby-head
7
7
  - ree
8
- - rbx
9
- - rbx-2.0
8
+ - rbx-18mode
9
+ - rbx-19mode
10
10
  - jruby
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 }
@@ -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 = ActiveValidators::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 = address.domain && value.include?(address.address)
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
- it "accepts valid emails" do
5
- subject = build_email_record :email => 'franck@verrot.fr'
6
- subject.valid?.must_equal true
7
- subject.errors.size.must_equal 0
8
- end
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
- it "accepts complete emails" do
11
- subject = build_email_record :email => 'Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>'
12
- subject.valid?.must_equal true
13
- subject.errors.size.must_equal 0
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 "generates an error message of type invalid" do
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 => true
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
- prerelease: false
5
- segments:
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
- - "Paco Guzm\xC3\xA1n"
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
- date: 2011-12-17 00:00:00 +01:00
23
- default_executable:
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
- prerelease: false
28
- requirement: &id001 !ruby/object:Gem::Requirement
29
- requirements:
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- segments:
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
- requirement: &id002 !ruby/object:Gem::Requirement
41
- requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
44
- segments:
45
- - 0
46
- version: "0"
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
- requirement: &id003 !ruby/object:Gem::Requirement
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- segments:
57
- - 0
58
- - 8
59
- - 7
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
- requirement: &id004 !ruby/object:Gem::Requirement
67
- requirements:
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- segments:
71
- - 3
72
- - 0
73
- - 0
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
- requirement: &id005 !ruby/object:Gem::Requirement
81
- requirements:
82
- - - ">="
83
- - !ruby/object:Gem::Version
84
- segments:
85
- - 0
86
- version: "0"
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
- requirement: &id006 !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- segments:
97
- - 0
98
- version: "0"
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
- version_requirements: *id006
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
- requirements:
155
- - - ">="
156
- - !ruby/object:Gem::Version
157
- segments:
158
- - 0
159
- version: "0"
160
- required_rubygems_version: !ruby/object:Gem::Requirement
161
- requirements:
162
- - - ">="
163
- - !ruby/object:Gem::Version
164
- segments:
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.3.6
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
@@ -1,4 +0,0 @@
1
- # encoding: utf-8
2
- module ActiveValidators
3
- VERSION = '1.8.1'
4
- end