valid_email2 0.0.3 → 0.0.4
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 +12 -0
- data/README.md +6 -1
- data/gemfiles/activemodel3.gemfile +5 -0
- data/gemfiles/activemodel4.gemfile +5 -0
- data/lib/valid_email2/address.rb +48 -0
- data/lib/valid_email2/version.rb +1 -1
- data/lib/valid_email2.rb +9 -32
- data/spec/spec_helper.rb +2 -0
- data/spec/valid_email2_spec.rb +1 -6
- data/valid_email2.gemspec +1 -0
- data/{disposable_emails.yml → vendor/disposable_emails.yml} +0 -0
- metadata +21 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1d3456e7cb1c7feb85fdff2260fd595711cd2a9f
|
4
|
+
data.tar.gz: 36f3e8a848db9bbb0abb3ea5c30cd5b85d182f8b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2bfb2d8ceaeba93622137e87ebf5fb2c990d04419dd3f5bd0e0f063022459859f2520f617a8ef943c120cc54034f242f946d337e6870ca803c700a410640c61c
|
7
|
+
data.tar.gz: 10eabac3bb4f6be94139d7820182598908ec4c721a282148aef741914603555608116d89eae4dd339ef7338df593688e80852381c7d6cef97cc2e6d9ac88f578
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
# ValidEmail2
|
2
|
+
[](https://travis-ci.org/lisinge/valid_email2)
|
3
|
+
[](https://coveralls.io/r/lisinge/valid_email2)
|
4
|
+
[](https://codeclimate.com/github/lisinge/valid_email2)
|
5
|
+
[](https://gemnasium.com/lisinge/valid_email2)
|
2
6
|
|
3
|
-
|
7
|
+
Validate emails without regexp but with the help of the `mail` gem and MX server lookup.
|
8
|
+
Optionally validate against a list of disposable email domains.
|
4
9
|
|
5
10
|
## Installation
|
6
11
|
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require "resolv"
|
2
|
+
require "mail"
|
3
|
+
|
4
|
+
module ValidEmail2
|
5
|
+
class Address
|
6
|
+
attr_accessor :address
|
7
|
+
|
8
|
+
def initialize(address)
|
9
|
+
@parse_error = false
|
10
|
+
|
11
|
+
begin
|
12
|
+
@raw_address = address
|
13
|
+
@address = Mail::Address.new(address)
|
14
|
+
rescue Mail::Field::ParseError
|
15
|
+
@parse_error = true
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def valid?
|
20
|
+
return false if @parse_error
|
21
|
+
|
22
|
+
if address.domain && address.address == @raw_address
|
23
|
+
tree = address.send(:tree)
|
24
|
+
|
25
|
+
# Valid address needs to have a dot in the domain
|
26
|
+
tree.domain.dot_atom_text.elements.size > 1
|
27
|
+
else
|
28
|
+
false
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def disposable?
|
33
|
+
valid? && ValidEmail2.disposable_emails.include?(address.domain)
|
34
|
+
end
|
35
|
+
|
36
|
+
def valid_mx?
|
37
|
+
return false unless valid?
|
38
|
+
|
39
|
+
mx = []
|
40
|
+
|
41
|
+
Resolv::DNS.open do |dns|
|
42
|
+
mx.concat dns.getresources(address.domain, Resolv::DNS::Resource::IN::MX)
|
43
|
+
end
|
44
|
+
|
45
|
+
mx.any?
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/valid_email2/version.rb
CHANGED
data/lib/valid_email2.rb
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
require "valid_email2/version"
|
2
|
+
require "valid_email2/address"
|
2
3
|
require "active_model"
|
3
4
|
require "active_model/validations"
|
4
|
-
require "resolv"
|
5
|
-
require "mail"
|
6
5
|
|
7
|
-
|
6
|
+
module ValidEmail2
|
8
7
|
def self.disposable_emails
|
9
|
-
@@disposable_emails ||= YAML.load_file(File.expand_path("../../disposable_emails.yml",__FILE__))
|
8
|
+
@@disposable_emails ||= YAML.load_file(File.expand_path("../../vendor/disposable_emails.yml",__FILE__))
|
10
9
|
end
|
10
|
+
end
|
11
11
|
|
12
|
+
class EmailValidator < ActiveModel::EachValidator
|
12
13
|
def default_options
|
13
14
|
{ regex: true, disposable: false, mx: false }
|
14
15
|
end
|
@@ -17,40 +18,16 @@ class EmailValidator < ActiveModel::EachValidator
|
|
17
18
|
return unless value.present?
|
18
19
|
options = default_options.merge(self.options)
|
19
20
|
|
20
|
-
|
21
|
-
email = Mail::Address.new(value)
|
22
|
-
rescue Mail::Field::ParseError
|
23
|
-
error(record, attribute) && return
|
24
|
-
return
|
25
|
-
end
|
26
|
-
|
27
|
-
if email.domain && email.address == value
|
28
|
-
tree = email.send(:tree)
|
21
|
+
address = ValidEmail2::Address.new(value)
|
29
22
|
|
30
|
-
|
31
|
-
unless tree.domain.dot_atom_text.elements.size > 1
|
32
|
-
error(record, attribute) && return
|
33
|
-
end
|
34
|
-
else
|
35
|
-
error(record, attribute) && return
|
36
|
-
end
|
23
|
+
error(record, attribute) && return unless address.valid?
|
37
24
|
|
38
25
|
if options[:disposable]
|
39
|
-
if
|
40
|
-
error(record, attribute) && return
|
41
|
-
end
|
26
|
+
error(record, attribute) && return if address.disposable?
|
42
27
|
end
|
43
28
|
|
44
29
|
if options[:mx]
|
45
|
-
|
46
|
-
|
47
|
-
Resolv::DNS.open do |dns|
|
48
|
-
mx.concat dns.getresources(email.domain, Resolv::DNS::Resource::IN::MX)
|
49
|
-
end
|
50
|
-
|
51
|
-
unless mx.any?
|
52
|
-
error(record, attribute) && return
|
53
|
-
end
|
30
|
+
error(record, attribute) && return unless address.valid_mx?
|
54
31
|
end
|
55
32
|
end
|
56
33
|
|
data/spec/spec_helper.rb
CHANGED
data/spec/valid_email2_spec.rb
CHANGED
@@ -30,11 +30,6 @@ describe ValidEmail2 do
|
|
30
30
|
Mail::Address.stub(:new).and_raise(Mail::Field::ParseError.new(nil, nil, nil))
|
31
31
|
user.valid?.should be_false
|
32
32
|
end
|
33
|
-
|
34
|
-
it "blah" do
|
35
|
-
user = TestUserMX.new(email: "invalid_email.com")
|
36
|
-
user.valid?.should be_false
|
37
|
-
end
|
38
33
|
end
|
39
34
|
|
40
35
|
describe "disposable emails" do
|
@@ -44,7 +39,7 @@ describe ValidEmail2 do
|
|
44
39
|
end
|
45
40
|
|
46
41
|
it "should be invalid when email is in the list of disposable emails" do
|
47
|
-
user = TestUserDisallowDisposable.new(email: "foo@#{
|
42
|
+
user = TestUserDisallowDisposable.new(email: "foo@#{ValidEmail2.disposable_emails.first}")
|
48
43
|
user.valid?.should be_false
|
49
44
|
end
|
50
45
|
end
|
data/valid_email2.gemspec
CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
22
|
spec.add_development_dependency "rake"
|
23
23
|
spec.add_development_dependency "rspec", "~> 2.14.1"
|
24
|
+
spec.add_development_dependency "coveralls"
|
24
25
|
spec.add_runtime_dependency "mail"
|
25
26
|
spec.add_runtime_dependency "activemodel"
|
26
27
|
end
|
File without changes
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: valid_email2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Micke Lisinge
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-07-
|
11
|
+
date: 2013-07-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 2.14.1
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: coveralls
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: mail
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -89,16 +103,20 @@ extensions: []
|
|
89
103
|
extra_rdoc_files: []
|
90
104
|
files:
|
91
105
|
- .gitignore
|
106
|
+
- .travis.yml
|
92
107
|
- Gemfile
|
93
108
|
- LICENSE.txt
|
94
109
|
- README.md
|
95
110
|
- Rakefile
|
96
|
-
-
|
111
|
+
- gemfiles/activemodel3.gemfile
|
112
|
+
- gemfiles/activemodel4.gemfile
|
97
113
|
- lib/valid_email2.rb
|
114
|
+
- lib/valid_email2/address.rb
|
98
115
|
- lib/valid_email2/version.rb
|
99
116
|
- spec/spec_helper.rb
|
100
117
|
- spec/valid_email2_spec.rb
|
101
118
|
- valid_email2.gemspec
|
119
|
+
- vendor/disposable_emails.yml
|
102
120
|
homepage: https://github.com/lisinge/valid_email2
|
103
121
|
licenses:
|
104
122
|
- MIT
|