valid_email2 1.0.0 → 1.1.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.
- checksums.yaml +4 -4
- data/.travis.yml +2 -1
- data/CHANGELOG.md +3 -0
- data/README.md +25 -7
- data/lib/valid_email2.rb +5 -2
- data/lib/valid_email2/address.rb +4 -0
- data/lib/valid_email2/email_validator.rb +4 -0
- data/lib/valid_email2/version.rb +3 -0
- data/spec/valid_email2_spec.rb +16 -0
- data/valid_email2.gemspec +2 -2
- data/vendor/blacklist.yml +1 -0
- data/vendor/disposable_emails.yml +18 -0
- metadata +23 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 47c9a632e7366f69dce75eb727db1de39a5e3fc3
|
4
|
+
data.tar.gz: 46515df8af73b701e3d7aa07f0e0aa0978bbe25b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7216249244329396469e769a6c369446f107af2d0ac52e21e6639a0e3411e5778d5f694ec2b990d304f361705f5c6a9f53bd16083021e337af8f1a01dbcd1efb
|
7
|
+
data.tar.gz: aacbf6ddd454fe15d081714dee7cbcad1aacc779b514c13fc783265877f7196107110e31a5d0220d36ca435738a038d194659ad923bb6f95cbabfc7ee237b964
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -4,15 +4,16 @@
|
|
4
4
|
[](https://coveralls.io/r/lisinge/valid_email2)
|
5
5
|
[](https://codeclimate.com/github/lisinge/valid_email2)
|
6
6
|
[](https://gemnasium.com/lisinge/valid_email2)
|
7
|
+
[](http://waffle.io/lisinge/valid_email2)
|
7
8
|
|
8
|
-
Validate emails with the help of the `mail` gem instead of some
|
9
|
-
Aditionally validate that the domain has a MX record.
|
9
|
+
Validate emails with the help of the `mail` gem instead of some clunky regexp.
|
10
|
+
Aditionally validate that the domain has a MX record.
|
10
11
|
Optionally validate against a static [list of disposable email services](vendor/disposable_emails.yml).
|
11
12
|
|
12
13
|
|
13
14
|
### Why?
|
14
15
|
|
15
|
-
There are lots of other gems and libraries that validates email adresses but most of them use some
|
16
|
+
There are lots of other gems and libraries that validates email adresses but most of them use some clunky regexp.
|
16
17
|
I also saw a need to be able to validate that the email address is not coming from a "disposable email" provider.
|
17
18
|
|
18
19
|
### Is it production ready?
|
@@ -46,17 +47,22 @@ class User < ActiveRecord::Base
|
|
46
47
|
end
|
47
48
|
```
|
48
49
|
|
49
|
-
To validate that the domain has a MX record:
|
50
|
+
To validate that the domain has a MX record:
|
50
51
|
```ruby
|
51
52
|
validates :email, email: { mx: true }
|
52
53
|
```
|
53
54
|
|
54
|
-
To validate that the domain is not a disposable email:
|
55
|
+
To validate that the domain is not a disposable email:
|
55
56
|
```ruby
|
56
57
|
validates :email, email: { disposable: true }
|
57
58
|
```
|
58
59
|
|
59
|
-
|
60
|
+
To validate that the domain is not blacklisted (under vendor/blacklist.yml):
|
61
|
+
```ruby
|
62
|
+
validates :email, email: { blacklist: true }
|
63
|
+
```
|
64
|
+
|
65
|
+
All together:
|
60
66
|
```ruby
|
61
67
|
validates :email, email: { mx: true, disposable: true }
|
62
68
|
```
|
@@ -73,14 +79,26 @@ address.disposable? => false
|
|
73
79
|
address.valid_mx? => true
|
74
80
|
```
|
75
81
|
|
82
|
+
### Test environment
|
83
|
+
|
84
|
+
If you are validating `mx` then your specs will fail without an internet connection.
|
85
|
+
It is a good idea to stub out that validation in your test environment.
|
86
|
+
Do so by adding this in your `spec_helper`:
|
87
|
+
```ruby
|
88
|
+
config.before(:each) do
|
89
|
+
allow_any_instance_of(ValidEmail2::Address).to receive(:valid_mx?) { true }
|
90
|
+
end
|
91
|
+
```
|
92
|
+
|
76
93
|
## Requirements
|
77
94
|
|
78
95
|
This gem requires Rails 3.2 or 4.0. It is tested against both versions under:
|
79
96
|
* Ruby-1.9
|
80
97
|
* Ruby-2.0
|
98
|
+
* Ruby-2.1
|
81
99
|
* JRuby-1.9
|
82
100
|
* JRuby-2.0
|
83
|
-
* Rubinius-1
|
101
|
+
* Rubinius-2.1
|
84
102
|
|
85
103
|
## Contributing
|
86
104
|
|
data/lib/valid_email2.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
require "valid_email2/email_validator"
|
2
2
|
|
3
3
|
module ValidEmail2
|
4
|
-
VERSION = "1.0.0"
|
5
|
-
|
6
4
|
def self.disposable_emails
|
7
5
|
@@disposable_emails ||= YAML.load_file(File.expand_path("../../vendor/disposable_emails.yml",__FILE__))
|
8
6
|
end
|
7
|
+
|
8
|
+
def self.blacklist
|
9
|
+
blacklist_file = "vendor/blacklist.yml"
|
10
|
+
@@blacklist ||= File.exists?(blacklist_file) ? YAML.load_file(File.expand_path(blacklist_file)) : []
|
11
|
+
end
|
9
12
|
end
|
data/lib/valid_email2/address.rb
CHANGED
@@ -19,6 +19,10 @@ class EmailValidator < ActiveModel::EachValidator
|
|
19
19
|
error(record, attribute) && return if address.disposable?
|
20
20
|
end
|
21
21
|
|
22
|
+
if options[:blacklist]
|
23
|
+
error(record, attribute) && return if address.blacklisted?
|
24
|
+
end
|
25
|
+
|
22
26
|
if options[:mx]
|
23
27
|
error(record, attribute) && return unless address.valid_mx?
|
24
28
|
end
|
data/spec/valid_email2_spec.rb
CHANGED
@@ -12,6 +12,10 @@ class TestUserDisallowDisposable < TestModel
|
|
12
12
|
validates :email, email: { disposable: true }
|
13
13
|
end
|
14
14
|
|
15
|
+
class TestUserDisallowBlacklisted < TestModel
|
16
|
+
validates :email, email: { blacklist: true }
|
17
|
+
end
|
18
|
+
|
15
19
|
describe ValidEmail2 do
|
16
20
|
describe "basic validation" do
|
17
21
|
subject(:user) { TestUser.new(email: "") }
|
@@ -49,6 +53,18 @@ describe ValidEmail2 do
|
|
49
53
|
end
|
50
54
|
end
|
51
55
|
|
56
|
+
describe "blacklisted emails" do
|
57
|
+
it "should be valid when email is not in the blacklist" do
|
58
|
+
user = TestUserDisallowBlacklisted.new(email: "foo@gmail.com")
|
59
|
+
user.valid?.should be_true
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should be invalid when email is in the blacklist" do
|
63
|
+
user = TestUserDisallowBlacklisted.new(email: "foo@#{ValidEmail2.blacklist.first}")
|
64
|
+
user.valid?.should be_false
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
52
68
|
describe "mx lookup" do
|
53
69
|
it "should be valid if mx records are found" do
|
54
70
|
user = TestUserMX.new(email: "foo@gmail.com")
|
data/valid_email2.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require "valid_email2"
|
4
|
+
require "valid_email2/version"
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "valid_email2"
|
@@ -22,6 +22,6 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_development_dependency "rake"
|
23
23
|
spec.add_development_dependency "rspec", "~> 2.14.1"
|
24
24
|
spec.add_development_dependency "coveralls"
|
25
|
-
spec.add_runtime_dependency "mail"
|
25
|
+
spec.add_runtime_dependency "mail", '~> 2.5.4'
|
26
26
|
spec.add_runtime_dependency "activemodel"
|
27
27
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
- blacklisted-test.com
|
@@ -11,6 +11,7 @@
|
|
11
11
|
- 20minutemail.com
|
12
12
|
- 2prong.com
|
13
13
|
- 30minutemail.com
|
14
|
+
- 33mail.com
|
14
15
|
- 3d-painting.com
|
15
16
|
- 4warding.com
|
16
17
|
- 4warding.net
|
@@ -37,6 +38,7 @@
|
|
37
38
|
- antichef.com
|
38
39
|
- antichef.net
|
39
40
|
- antispam.de
|
41
|
+
- armyspy.com
|
40
42
|
- baxomale.ht.cx
|
41
43
|
- beefmilk.com
|
42
44
|
- binkmail.com
|
@@ -61,9 +63,11 @@
|
|
61
63
|
- cosmorph.com
|
62
64
|
- courriel.fr.nf
|
63
65
|
- courrieltemporaire.com
|
66
|
+
- crapmail.org
|
64
67
|
- cubiclink.com
|
65
68
|
- curryworld.de
|
66
69
|
- cust.in
|
70
|
+
- cuvox.de
|
67
71
|
- dacoolest.com
|
68
72
|
- dandikmail.com
|
69
73
|
- dayrep.com
|
@@ -88,11 +92,13 @@
|
|
88
92
|
- donemail.ru
|
89
93
|
- dontreg.com
|
90
94
|
- dontsendmespam.de
|
95
|
+
- drdrb.com
|
91
96
|
- dump-email.info
|
92
97
|
- dumpandjunk.com
|
93
98
|
- dumpmail.de
|
94
99
|
- dumpyemail.com
|
95
100
|
- e4ward.com
|
101
|
+
- einrot.com
|
96
102
|
- email60.com
|
97
103
|
- emaildienst.de
|
98
104
|
- emailias.com
|
@@ -134,6 +140,7 @@
|
|
134
140
|
- garliclife.com
|
135
141
|
- get1mail.com
|
136
142
|
- get2mail.fr
|
143
|
+
- getairmail.com
|
137
144
|
- getonemail.com
|
138
145
|
- getonemail.net
|
139
146
|
- ghosttexter.de
|
@@ -150,6 +157,7 @@
|
|
150
157
|
- gowikitv.com
|
151
158
|
- great-host.in
|
152
159
|
- greensloth.com
|
160
|
+
- grr.la
|
153
161
|
- gsrv.co.uk
|
154
162
|
- guerillamail.biz
|
155
163
|
- guerillamail.com
|
@@ -161,6 +169,7 @@
|
|
161
169
|
- guerrillamail.net
|
162
170
|
- guerrillamail.org
|
163
171
|
- guerrillamailblock.com
|
172
|
+
- gustr.com
|
164
173
|
- h.mintemail.com
|
165
174
|
- h8s.org
|
166
175
|
- haltospam.com
|
@@ -174,6 +183,7 @@
|
|
174
183
|
- ihateyoualot.info
|
175
184
|
- iheartspam.org
|
176
185
|
- imails.info
|
186
|
+
- inboxalias.com
|
177
187
|
- inboxclean.com
|
178
188
|
- inboxclean.org
|
179
189
|
- incognitomail.com
|
@@ -188,6 +198,7 @@
|
|
188
198
|
- jetable.net
|
189
199
|
- jetable.org
|
190
200
|
- jnxjn.com
|
201
|
+
- jourrapide.com
|
191
202
|
- junk1e.com
|
192
203
|
- kasmail.com
|
193
204
|
- kaspop.com
|
@@ -198,6 +209,7 @@
|
|
198
209
|
- klassmaster.com
|
199
210
|
- klassmaster.net
|
200
211
|
- klzlk.com
|
212
|
+
- koszmail.pl
|
201
213
|
- kulturbetrieb.info
|
202
214
|
- kurzepost.de
|
203
215
|
- letthemeatspam.com
|
@@ -221,9 +233,11 @@
|
|
221
233
|
- mailbidon.com
|
222
234
|
- mailblocks.com
|
223
235
|
- mailcatch.com
|
236
|
+
- maildrop.cc
|
224
237
|
- maileater.com
|
225
238
|
- mailexpire.com
|
226
239
|
- mailfreeonline.com
|
240
|
+
- mailforspam.com
|
227
241
|
- mailin8r.com
|
228
242
|
- mailinater.com
|
229
243
|
- mailinator.com
|
@@ -321,6 +335,7 @@
|
|
321
335
|
- regbypass.com
|
322
336
|
- regbypass.comsafe-mail.net
|
323
337
|
- rejectmail.com
|
338
|
+
- rhyta.com
|
324
339
|
- rklips.com
|
325
340
|
- rmqkr.net
|
326
341
|
- rppkn.com
|
@@ -351,6 +366,7 @@
|
|
351
366
|
- soodonims.com
|
352
367
|
- spam.la
|
353
368
|
- spam.su
|
369
|
+
- spam4.me
|
354
370
|
- spamavert.com
|
355
371
|
- spambob.com
|
356
372
|
- spambob.net
|
@@ -399,9 +415,11 @@
|
|
399
415
|
- speed.1s.fr
|
400
416
|
- supergreatmail.com
|
401
417
|
- supermailer.jp
|
418
|
+
- superrito.com
|
402
419
|
- suremail.info
|
403
420
|
- teewars.org
|
404
421
|
- teleworm.com
|
422
|
+
- teleworm.us
|
405
423
|
- tempalias.com
|
406
424
|
- tempe-mail.com
|
407
425
|
- tempemail.biz
|
metadata
CHANGED
@@ -1,97 +1,97 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: valid_email2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Micke Lisinge
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-02-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.3'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 2.14.1
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 2.14.1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: coveralls
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: mail
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 2.5.4
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 2.5.4
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: activemodel
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
description: ActiveModel validation for email. Including MX lookup and disposable
|
@@ -102,8 +102,8 @@ executables: []
|
|
102
102
|
extensions: []
|
103
103
|
extra_rdoc_files: []
|
104
104
|
files:
|
105
|
-
- .gitignore
|
106
|
-
- .travis.yml
|
105
|
+
- ".gitignore"
|
106
|
+
- ".travis.yml"
|
107
107
|
- CHANGELOG.md
|
108
108
|
- Gemfile
|
109
109
|
- LICENSE.txt
|
@@ -114,9 +114,11 @@ files:
|
|
114
114
|
- lib/valid_email2.rb
|
115
115
|
- lib/valid_email2/address.rb
|
116
116
|
- lib/valid_email2/email_validator.rb
|
117
|
+
- lib/valid_email2/version.rb
|
117
118
|
- spec/spec_helper.rb
|
118
119
|
- spec/valid_email2_spec.rb
|
119
120
|
- valid_email2.gemspec
|
121
|
+
- vendor/blacklist.yml
|
120
122
|
- vendor/disposable_emails.yml
|
121
123
|
homepage: https://github.com/lisinge/valid_email2
|
122
124
|
licenses:
|
@@ -128,17 +130,17 @@ require_paths:
|
|
128
130
|
- lib
|
129
131
|
required_ruby_version: !ruby/object:Gem::Requirement
|
130
132
|
requirements:
|
131
|
-
- -
|
133
|
+
- - ">="
|
132
134
|
- !ruby/object:Gem::Version
|
133
135
|
version: '0'
|
134
136
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
135
137
|
requirements:
|
136
|
-
- -
|
138
|
+
- - ">="
|
137
139
|
- !ruby/object:Gem::Version
|
138
140
|
version: '0'
|
139
141
|
requirements: []
|
140
142
|
rubyforge_project:
|
141
|
-
rubygems_version: 2.
|
143
|
+
rubygems_version: 2.2.1
|
142
144
|
signing_key:
|
143
145
|
specification_version: 4
|
144
146
|
summary: ActiveModel validation for email. Including MX lookup and disposable email
|