email_validator 1.6.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 3a61b5f5394d7e3995cb72b8020ed8877539658f
4
- data.tar.gz: e1781250b91b5b62faf766b6120c0e91ae2cbd0e
2
+ SHA256:
3
+ metadata.gz: da5f6cc330adef4786045236ce8a34a49ad638a5b42c7447e7585711e0dccca4
4
+ data.tar.gz: 04eff8f220eaafdb748f8ba0bc1f8890f450b0620731b5c3a10c9125954b6e7b
5
5
  SHA512:
6
- metadata.gz: 7c0d25c20be026d62ef9bda3a775efe42e21f87be95323f3fbd5be16df2ed761d31066c0d54a3578ef1b7f22562e09df80152de910dd6a6517de936efce70279
7
- data.tar.gz: 2c6bd876e48aa9f27ac6d2ce53942961b52207cfe508d80dad93cd9df2ed0b0d1bc346ca3fc1ff8c218463b499b7d2fa5630af5374c3df013aec9cce183d93b7
6
+ metadata.gz: 9b39cbd7c9d87a3274f6d4b570a7a774ef0a232e5171f561a384e2c287d3242d832e91fb0240437484b5a500da98ee9715a20a5a15247075fbfd4100d596b0b2
7
+ data.tar.gz: 8907894a088e8a2c53c53eb346331abc561643b2316bd4f5132f8961bc9cb98e08dc3ea4cb930d3a038ad8199922c429047b314e75ff96f034f506936ae1621b
data/.travis.yml CHANGED
@@ -1,7 +1,16 @@
1
1
  rvm:
2
2
  - 1.9.3
3
3
  - 2.0.0
4
- - 2.1.3
4
+ - 2.1.10
5
+ - 2.2.10
6
+ - 2.3.8
7
+ - 2.4.5
8
+ - 2.5.3
9
+ - 2.6.1
5
10
  - ruby-head
6
11
  - jruby-19mode
7
- - rbx-2
12
+ - jruby-head
13
+ - rbx-3
14
+ matrix:
15
+ allow_failures:
16
+ - rvm: rbx-3
data/Changes.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # HEAD
2
2
 
3
+ # 2.0.0
4
+
5
+ * Looser validation [#49]
6
+
3
7
  # 1.6.0
4
8
 
5
9
  * Unicode characters support [i7an #24]
data/README.md CHANGED
@@ -17,47 +17,40 @@ bundle install
17
17
  Then add the following to your model:
18
18
 
19
19
  ```ruby
20
- validates :my_email_attribute, :email => true
20
+ validates :my_email_attribute, email: true
21
21
  ```
22
22
 
23
- ## Strict mode
24
-
25
- In order to have stricter validation (according to http://www.remote.org/jochen/mail/info/chars.html) enable strict mode. You can do this globally by adding the following to your Gemfile:
26
-
27
- ```ruby
28
- gem 'email_validator', :require => 'email_validator/strict'
29
- ```
23
+ ## Validation outside a model
30
24
 
31
- Or you can do this in a specific `validates` call:
25
+ If you'd like to validate an email outside of a model then here are some class methods that you can use:
32
26
 
33
27
  ```ruby
34
- validates :my_email_attribute, :email => {:strict_mode => true}
28
+ EmailValidator.regexp # returns the regex
29
+ EmailValidator.valid?('narf@example.com') # => true
30
+ EmailValidator.invalid?('narf@example.com') # => false
35
31
  ```
36
32
 
37
- ## Validation outside a model
38
-
39
- If you need to validate an email outside a model, you can get the regexp :
33
+ ## Validation philosophy
40
34
 
41
- ### Normal mode
35
+ The validation provided by this gem is loose. It just checks that there's an `@` with something before and after it. See [this article by David Gilbertson](https://hackernoon.com/the-100-correct-way-to-validate-email-addresses-7c4818f24643) for an explanation of why.
42
36
 
43
- ```ruby
44
- EmailValidator.regexp # returns the regex
45
- EmailValidator.valid?('narf@example.com') # boolean
46
- ```
37
+ ## Trimming whitespace
47
38
 
48
- ### Strict mode
39
+ Your users may accidentally submit leading or trailing whitespace when submitting a form. You may want to automatically trim this. This is not the job of a validator gem but it's trivial to implement yourself by adding a setter in your model:
49
40
 
50
41
  ```ruby
51
- EmailValidator.regexp(:strict_mode => true)
42
+ def email=(e)
43
+ e = e.strip if e
44
+ super
45
+ end
52
46
  ```
53
47
 
54
- ## Thread safety
55
-
56
- This gem is thread safe, with one caveat: `EmailValidator.default_options` must be configured before use in a multi-threaded environment. If you configure `default_options` in a Rails initializer file, then you're good to go since initializers are run before worker threads are spawned.
48
+ You may also want to convert emails to lowercase in the same way.
57
49
 
58
- ## Credit
50
+ ## Alternative gems
59
51
 
60
- Based on http://thelucid.com/2010/01/08/sexy-validation-in-edge-rails-rails-3
52
+ Do you prefer a different email validation gem? If so, open an issue with a brief explanation of how it differs from this gem. I'll add a link to it in this README.
61
53
 
62
- Regular Expression based on http://fightingforalostcause.net/misc/2006/compare-email-regex.php tests.
54
+ ## Thread safety
63
55
 
56
+ This gem is thread safe.
@@ -1,8 +1,8 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = %q{email_validator}
3
- s.version = "1.6.0"
3
+ s.version = "2.0.0"
4
4
  s.authors = ["Brian Alexander"]
5
- s.description = %q{An email validator for Rails 3+. See homepage for details: http://github.com/balexand/email_validator}
5
+ s.description = %q{Email validator for Rails and ActiveModel.}
6
6
  s.email = %q{balexand@gmail.com}
7
7
  s.extra_rdoc_files = [
8
8
  "LICENSE",
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
12
12
 
13
13
  s.homepage = %q{https://github.com/balexand/email_validator}
14
14
  s.require_paths = %w(lib)
15
- s.summary = %q{An email validator for Rails 3+.}
15
+ s.summary = %q{An email validator for Rails and ActiveModel.}
16
16
 
17
17
  s.add_dependency("activemodel", ">= 0")
18
18
 
@@ -1,28 +1,28 @@
1
- # encoding: UTF-8
2
- # Based on work from http://thelucid.com/2010/01/08/sexy-validation-in-edge-rails-rails-3/
3
- class EmailValidator < ActiveModel::EachValidator
4
- @@default_options = {}
1
+ # frozen_string_literal: true
2
+ require 'active_model'
5
3
 
4
+ class EmailValidator < ActiveModel::EachValidator
6
5
  def self.regexp(options = {})
7
- options = default_options.merge(options)
8
-
9
- name_validation = options[:strict_mode] ? "-\\p{L}\\d+._" : "^@\\s"
6
+ if options[:strict_mode]
7
+ ActiveSupport::Deprecation.warn(
8
+ 'Strict mode has been deprecated in email_validator 2.0. To fix this warning, '\
9
+ 'remove `strict_mode: true` from your validation call.'
10
+ )
11
+ end
10
12
 
11
- /\A\s*([#{name_validation}]{1,64})@((?:[-\p{L}\d]+\.)+\p{L}{2,})\s*\z/i
13
+ /[^\s]@[^\s]/
12
14
  end
13
15
 
14
- def self.valid?(value, options = {})
15
- !!(value =~ regexp(options))
16
+ def self.valid?(value, options = nil)
17
+ !invalid?(value)
16
18
  end
17
19
 
18
- def self.default_options
19
- @@default_options
20
+ def self.invalid?(value, options = nil)
21
+ !(value =~ regexp)
20
22
  end
21
23
 
22
24
  def validate_each(record, attribute, value)
23
- options = @@default_options.merge(self.options)
24
-
25
- unless self.class.valid?(value, self.options)
25
+ if self.class.invalid?(value)
26
26
  record.errors.add(attribute, options[:message] || :invalid)
27
27
  end
28
28
  end
@@ -1,5 +1,9 @@
1
- # require this file to enable :strict_mode by default
1
+ # frozen_string_literal: true
2
2
 
3
- require 'email_validator'
3
+ ActiveSupport::Deprecation.warn(
4
+ 'Strict mode has been deprecated in email_validator 2.0. You are receiving '\
5
+ 'this warning because your project is requiring "email_validator/strict", '\
6
+ 'most likely in your Gemfile.'
7
+ )
4
8
 
5
- EmailValidator::default_options[:strict_mode] = true
9
+ require 'email_validator'
@@ -5,10 +5,6 @@ class TestUser < TestModel
5
5
  validates :email, :email => true
6
6
  end
7
7
 
8
- class StrictUser < TestModel
9
- validates :email, :email => {:strict_mode => true}
10
- end
11
-
12
8
  class TestUserAllowsNil < TestModel
13
9
  validates :email, :email => {:allow_nil => true}
14
10
  end
@@ -49,25 +45,30 @@ describe EmailValidator do
49
45
  "nigel.worthington@big.co.uk",
50
46
  "f@c.com",
51
47
  "areallylongnameaasdfasdfasdfasdf@asdfasdfasdfasdfasdf.ab.cd.ef.gh.co.ca",
52
- "ящик@яндекс.рф"
48
+ "ящик@яндекс.рф",
49
+ "test@test.testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttes",
50
+ "hans,peter@example.com",
51
+ "hans(peter@example.com",
52
+ "hans)peter@example.com",
53
+ "partially.\"quoted\"@sld.com",
54
+ "&'*+-./=?^_{}~@other-valid-characters-in-local.net",
55
+ "mixed-1234-in-{+^}-local@sld.net",
56
+ "user@domain.рф",
57
+ "寿司@example.com"
53
58
  ].each do |email|
54
59
 
55
60
  it "#{email.inspect} should be valid" do
56
61
  expect(TestUser.new(:email => email)).to be_valid
57
62
  end
58
63
 
59
- it "#{email.inspect} should be valid in strict_mode" do
60
- expect(StrictUser.new(:email => email)).to be_valid
64
+ it "#{email.inspect} should not be invalid" do
65
+ expect(TestUser.new(:email => email)).not_to be_invalid
61
66
  end
62
67
 
63
68
  it "#{email.inspect} should match the regexp" do
64
69
  expect(email =~ EmailValidator.regexp).to be_truthy
65
70
  end
66
71
 
67
- it "#{email.inspect} should match the strict regexp" do
68
- expect(email =~ EmailValidator.regexp(:strict_mode => true)).to be_truthy
69
- end
70
-
71
72
  it "#{email.inspect} should pass the class tester" do
72
73
  expect(EmailValidator.valid?(email)).to be_truthy
73
74
  end
@@ -79,80 +80,32 @@ describe EmailValidator do
79
80
  context "given the invalid emails" do
80
81
  [
81
82
  "",
82
- "f@s",
83
- "f@s.c",
84
83
  "@bar.com",
85
- "test@example.com@example.com",
84
+ " @bar.com",
86
85
  "test@",
87
- "@missing-local.org",
88
- "a b@space-in-local.com",
89
- "! \#$%\`|@invalid-characters-in-local.org",
90
- "<>@[]\`|@even-more-invalid-characters-in-local.org",
91
- "missing-sld@.com",
92
- "invalid-characters-in-sld@! \"\#$%(),/;<>_[]\`|.org",
93
- "missing-dot-before-tld@com",
94
- "missing-tld@sld.",
86
+ "test@ ",
95
87
  " ",
96
88
  "missing-at-sign.net",
97
- "unbracketed-IP@127.0.0.1",
98
- "invalid-ip@127.0.0.1.26",
99
- "another-invalid-ip@127.0.0.256",
100
- "IP-and-port@127.0.0.1:25",
101
- "the-local-part-is-invalid-if-it-is-longer-than-sixty-four-characters@sld.net",
102
- "user@example.com\n<script>alert('hello')</script>"
103
89
  ].each do |email|
104
90
 
105
91
  it "#{email.inspect} should not be valid" do
106
92
  expect(TestUser.new(:email => email)).not_to be_valid
107
93
  end
108
94
 
109
- it "#{email.inspect} should not be valid in strict_mode" do
110
- expect(StrictUser.new(:email => email)).not_to be_valid
95
+ it "#{email.inspect} should be invalid" do
96
+ expect(TestUser.new(:email => email)).to be_invalid
111
97
  end
112
98
 
113
99
  it "#{email.inspect} should not match the regexp" do
114
100
  expect(email =~ EmailValidator.regexp).to be_falsy
115
101
  end
116
102
 
117
- it "#{email.inspect} should not match the strict regexp" do
118
- expect(email =~ EmailValidator.regexp(:strict_mode => true)).to be_falsy
119
- end
120
-
121
103
  it "#{email.inspect} should fail the class tester" do
122
104
  expect(EmailValidator.valid?(email)).to be_falsy
123
105
  end
124
106
 
125
107
  end
126
108
  end
127
-
128
- context "given the emails that should be invalid in strict_mode but valid in normal mode" do
129
- [
130
- "hans,peter@example.com",
131
- "hans(peter@example.com",
132
- "hans)peter@example.com",
133
- "partially.\"quoted\"@sld.com",
134
- "&'*+-./=?^_{}~@other-valid-characters-in-local.net",
135
- "mixed-1234-in-{+^}-local@sld.net"
136
- ].each do |email|
137
-
138
- it "#{email.inspect} should be valid" do
139
- expect(TestUser.new(:email => email)).to be_valid
140
- end
141
-
142
- it "#{email.inspect} should not be valid in strict_mode" do
143
- expect(StrictUser.new(:email => email)).not_to be_valid
144
- end
145
-
146
- it "#{email.inspect} should match the regexp" do
147
- expect(email =~ EmailValidator.regexp).to be_truthy
148
- end
149
-
150
- it "#{email.inspect} should not match the strict regexp" do
151
- expect(email =~ EmailValidator.regexp(:strict_mode => true)).to be_falsy
152
- end
153
-
154
- end
155
- end
156
109
  end
157
110
 
158
111
  describe "error messages" do
@@ -188,14 +141,4 @@ describe EmailValidator do
188
141
  expect(TestUserAllowsNilFalse.new(:email => nil)).not_to be_valid
189
142
  end
190
143
  end
191
-
192
- describe "default_options" do
193
- context "when 'email_validator/strict' has been required" do
194
- before { require 'email_validator/strict' }
195
-
196
- it "should validate using strict mode" do
197
- expect(TestUser.new(:email => "&'*+-./=?^_{}~@other-valid-characters-in-local.net")).not_to be_valid
198
- end
199
- end
200
- end
201
144
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: email_validator
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Alexander
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-12 00:00:00.000000000 Z
11
+ date: 2019-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -52,7 +52,7 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- description: 'An email validator for Rails 3+. See homepage for details: http://github.com/balexand/email_validator'
55
+ description: Email validator for Rails and ActiveModel.
56
56
  email: balexand@gmail.com
57
57
  executables: []
58
58
  extensions: []
@@ -90,9 +90,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
90
  - !ruby/object:Gem::Version
91
91
  version: '0'
92
92
  requirements: []
93
- rubyforge_project:
94
- rubygems_version: 2.4.5
93
+ rubygems_version: 3.0.1
95
94
  signing_key:
96
95
  specification_version: 4
97
- summary: An email validator for Rails 3+.
96
+ summary: An email validator for Rails and ActiveModel.
98
97
  test_files: []