email_address 0.1.19 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +18 -0
- data/Gemfile +1 -1
- data/README.md +27 -2
- data/Rakefile +2 -2
- data/email_address.gemspec +23 -23
- data/lib/email_address/active_record_validator.rb +5 -9
- data/lib/email_address/address.rb +29 -19
- data/lib/email_address/config.rb +13 -2
- data/lib/email_address/exchanger.rb +5 -19
- data/lib/email_address/host.rb +29 -45
- data/lib/email_address/local.rb +104 -105
- data/lib/email_address/rewriter.rb +28 -31
- data/lib/email_address/version.rb +1 -1
- data/lib/email_address.rb +8 -9
- data/test/activerecord/test_ar.rb +17 -13
- data/test/activerecord/user.rb +31 -30
- data/test/email_address/test_address.rb +46 -25
- data/test/email_address/test_config.rb +8 -8
- data/test/email_address/test_exchanger.rb +6 -7
- data/test/email_address/test_host.rb +2 -1
- data/test/email_address/test_local.rb +39 -35
- data/test/email_address/test_rewriter.rb +2 -5
- data/test/test_aliasing.rb +1 -2
- data/test/test_email_address.rb +14 -18
- data/test/test_helper.rb +9 -8
- metadata +29 -18
- data/.travis.yml +0 -9
data/test/activerecord/user.rb
CHANGED
@@ -6,35 +6,38 @@ class ApplicationRecord < ActiveRecord::Base
|
|
6
6
|
self.abstract_class = true
|
7
7
|
end
|
8
8
|
|
9
|
-
dbfile = ENV[
|
9
|
+
dbfile = ENV["EMAIL_ADDRESS_TEST_DB"] || "/tmp/email_address.gem.db"
|
10
10
|
File.unlink(dbfile) if File.exist?(dbfile)
|
11
11
|
|
12
12
|
# Connection: JRuby vs. MRI
|
13
|
-
|
14
|
-
|
15
|
-
require
|
16
|
-
require
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
13
|
+
# Disabled JRuby checks... weird CI failures. Hopefully someone can help?
|
14
|
+
if RUBY_PLATFORM == "java" # jruby
|
15
|
+
# require "jdbc/sqlite3"
|
16
|
+
# require "java"
|
17
|
+
# require "activerecord-jdbcsqlite3-adapter"
|
18
|
+
# Jdbc::SQLite3.load_driver
|
19
|
+
# ActiveRecord::Base.establish_connection(
|
20
|
+
# adapter: "jdbc",
|
21
|
+
# driver: "org.sqlite.JDBC",
|
22
|
+
# url: "jdbc:sqlite:" + dbfile
|
23
|
+
# )
|
23
24
|
else
|
24
|
-
require
|
25
|
+
require "sqlite3"
|
25
26
|
ActiveRecord::Base.establish_connection(
|
26
|
-
:
|
27
|
-
:
|
27
|
+
adapter: "sqlite3",
|
28
|
+
database: dbfile
|
28
29
|
)
|
29
|
-
end
|
30
30
|
|
31
|
-
|
32
|
-
|
31
|
+
# The following would be executed for both JRuby/MRI
|
32
|
+
ApplicationRecord.connection.execute(
|
33
|
+
"create table users ( email varchar, canonical_email varchar)"
|
34
|
+
)
|
33
35
|
|
34
|
-
if defined?(ActiveRecord) && ::ActiveRecord::VERSION::MAJOR >= 5
|
35
|
-
|
36
|
-
|
37
|
-
|
36
|
+
if defined?(ActiveRecord) && ::ActiveRecord::VERSION::MAJOR >= 5
|
37
|
+
ActiveRecord::Type.register(:email_address, EmailAddress::EmailAddressType)
|
38
|
+
ActiveRecord::Type.register(:canonical_email_address,
|
39
|
+
EmailAddress::CanonicalEmailAddressType)
|
40
|
+
end
|
38
41
|
end
|
39
42
|
|
40
43
|
################################################################################
|
@@ -42,30 +45,28 @@ end
|
|
42
45
|
################################################################################
|
43
46
|
|
44
47
|
class User < ApplicationRecord
|
45
|
-
|
46
48
|
if defined?(ActiveRecord) && ::ActiveRecord::VERSION::MAJOR >= 5
|
47
49
|
attribute :email, :email_address
|
48
50
|
attribute :canonical_email, :canonical_email_address
|
49
51
|
end
|
50
52
|
|
51
53
|
validates_with EmailAddress::ActiveRecordValidator,
|
52
|
-
fields: %i
|
54
|
+
fields: %i[email canonical_email]
|
53
55
|
|
54
56
|
def email=(email_address)
|
55
57
|
self[:canonical_email] = email_address
|
56
|
-
self[:email]
|
58
|
+
self[:email] = email_address
|
57
59
|
end
|
58
60
|
|
59
61
|
def self.find_by_email(email)
|
60
|
-
user
|
61
|
-
user ||=
|
62
|
-
user ||=
|
62
|
+
user = find_by(email: EmailAddress.normal(email))
|
63
|
+
user ||= find_by(canonical_email: EmailAddress.canonical(email))
|
64
|
+
user ||= find_by(canonical_email: EmailAddress.redacted(email))
|
63
65
|
user
|
64
66
|
end
|
65
67
|
|
66
68
|
def redact!
|
67
|
-
self[:canonical_email] = EmailAddress.redact(
|
68
|
-
self[:email]
|
69
|
+
self[:canonical_email] = EmailAddress.redact(canonical_email)
|
70
|
+
self[:email] = self[:canonical_email]
|
69
71
|
end
|
70
|
-
|
71
72
|
end
|
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
require_relative '../test_helper'
|
1
|
+
require_relative "../test_helper"
|
3
2
|
|
4
3
|
class TestAddress < Minitest::Test
|
5
4
|
def test_address
|
@@ -22,7 +21,7 @@ class TestAddress < Minitest::Test
|
|
22
21
|
def test_host
|
23
22
|
a = EmailAddress.new("User+tag@example.com")
|
24
23
|
assert_equal "example.com", a.hostname
|
25
|
-
#assert_equal :default, a.provider
|
24
|
+
# assert_equal :default, a.provider
|
26
25
|
end
|
27
26
|
|
28
27
|
# ADDRESS
|
@@ -34,7 +33,27 @@ class TestAddress < Minitest::Test
|
|
34
33
|
assert_equal "{63a710569261a24b3766275b7000ce8d7b32e2f7}@example.com", a.redact
|
35
34
|
assert_equal "{b58996c504c5638798eb6b511e6f49af}@example.com", a.redact(:md5)
|
36
35
|
assert_equal "b58996c504c5638798eb6b511e6f49af", a.reference
|
37
|
-
assert_equal "6bdd00c53645790ad9bbcb50caa93880",
|
36
|
+
assert_equal "6bdd00c53645790ad9bbcb50caa93880", EmailAddress.reference("Gmail.User+tag@gmail.com")
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_sha1
|
40
|
+
a = EmailAddress.new("User+tag@example.com")
|
41
|
+
assert_equal "63a710569261a24b3766275b7000ce8d7b32e2f7", a.sha1
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_sha1_with_secret
|
45
|
+
a = EmailAddress.new("User+tag@example.com", sha1_secret: "test-secret")
|
46
|
+
assert_equal "122df4ec3ce7121db6edc06a9e29eab39a7e8007", a.sha1
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_sha256
|
50
|
+
a = EmailAddress.new("User+tag@example.com")
|
51
|
+
assert_equal "b4c9a289323b21a01c3e940f150eb9b8c542587f1abfd8f0e1cc1ffc5e475514", a.sha256
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_sha256_with_secret
|
55
|
+
a = EmailAddress.new("User+tag@example.com", sha256_secret: "test-secret")
|
56
|
+
assert_equal "480899ff53ccd446cc123f0c5685869644af445e788f1b559054919674307a07", a.sha256
|
38
57
|
end
|
39
58
|
|
40
59
|
def test_google_hosted
|
@@ -44,23 +63,23 @@ class TestAddress < Minitest::Test
|
|
44
63
|
|
45
64
|
# COMPARISON & MATCHING
|
46
65
|
def test_compare
|
47
|
-
a =
|
48
|
-
#e = EmailAddress.new("user@example.com")
|
66
|
+
a = "User+tag@example.com"
|
67
|
+
# e = EmailAddress.new("user@example.com")
|
49
68
|
n = EmailAddress.new(a)
|
50
69
|
c = EmailAddress.new_canonical(a)
|
51
|
-
#r = EmailAddress.new_redacted(a)
|
70
|
+
# r = EmailAddress.new_redacted(a)
|
52
71
|
assert_equal true, n == "user+tag@example.com"
|
53
|
-
assert_equal true, n >
|
72
|
+
assert_equal true, n > "b@example.com"
|
54
73
|
assert_equal true, n.same_as?(c)
|
55
74
|
assert_equal true, n.same_as?(a)
|
56
75
|
end
|
57
76
|
|
58
77
|
def test_matches
|
59
78
|
a = EmailAddress.new("User+tag@gmail.com")
|
60
|
-
assert_equal false,
|
61
|
-
assert_equal
|
62
|
-
assert_equal
|
63
|
-
assert_equal
|
79
|
+
assert_equal false, a.matches?("mail.com")
|
80
|
+
assert_equal "google", a.matches?("google")
|
81
|
+
assert_equal "user+tag@", a.matches?("user+tag@")
|
82
|
+
assert_equal "user*@gmail*", a.matches?("user*@gmail*")
|
64
83
|
end
|
65
84
|
|
66
85
|
def test_empty_address
|
@@ -74,18 +93,20 @@ class TestAddress < Minitest::Test
|
|
74
93
|
# VALIDATION
|
75
94
|
def test_valid
|
76
95
|
assert EmailAddress.valid?("User+tag@example.com", host_validation: :a), "valid 1"
|
77
|
-
assert !
|
78
|
-
assert EmailAddress.new("ɹᴉɐℲuǝll∀@ɹᴉɐℲuǝll∀.ws", local_encoding: :uncode, host_validation: :syntax
|
96
|
+
assert !EmailAddress.valid?("User%tag@example.com", host_validation: :a), "valid 2"
|
97
|
+
assert EmailAddress.new("ɹᴉɐℲuǝll∀@ɹᴉɐℲuǝll∀.ws", local_encoding: :uncode, host_validation: :syntax), "valid unicode"
|
79
98
|
end
|
80
99
|
|
81
100
|
def test_localhost
|
82
101
|
e = EmailAddress.new("User+tag.gmail.ws") # No domain means localhost
|
83
|
-
assert_equal
|
102
|
+
assert_equal "", e.hostname
|
84
103
|
assert_equal false, e.valid? # localhost not allowed by default
|
85
104
|
assert_equal EmailAddress.error("user1"), "Invalid Domain Name"
|
86
|
-
assert_equal EmailAddress.error("user1", host_local:true), "This domain is not configured to accept email"
|
87
|
-
assert_equal EmailAddress.error("user1@localhost", host_local:true), "This domain is not configured to accept email"
|
88
|
-
|
105
|
+
assert_equal EmailAddress.error("user1", host_local: true), "This domain is not configured to accept email"
|
106
|
+
assert_equal EmailAddress.error("user1@localhost", host_local: true), "This domain is not configured to accept email"
|
107
|
+
assert_equal EmailAddress.error("user1@localhost", host_local: false, host_validation: :syntax), "localhost is not allowed for your domain name"
|
108
|
+
assert_equal EmailAddress.error("user1@localhost", host_local: false, dns_lookup: :off), "localhost is not allowed for your domain name"
|
109
|
+
assert_nil EmailAddress.error("user2@localhost", host_local: true, dns_lookup: :off, host_validation: :syntax)
|
89
110
|
end
|
90
111
|
|
91
112
|
def test_regexen
|
@@ -97,7 +118,7 @@ class TestAddress < Minitest::Test
|
|
97
118
|
end
|
98
119
|
|
99
120
|
def test_srs
|
100
|
-
ea= "first.LAST+tag@gmail.com"
|
121
|
+
ea = "first.LAST+tag@gmail.com"
|
101
122
|
e = EmailAddress.new(ea)
|
102
123
|
s = e.srs("example.com")
|
103
124
|
assert s.match(EmailAddress::Address::SRS_FORMAT_REGEX)
|
@@ -106,20 +127,20 @@ class TestAddress < Minitest::Test
|
|
106
127
|
|
107
128
|
# Quick Regression tests for addresses that should have been valid (but fixed)
|
108
129
|
def test_issues
|
109
|
-
assert true, EmailAddress.valid?(
|
130
|
+
assert true, EmailAddress.valid?("test@jiff.com", dns_lookup: :mx) # #7
|
110
131
|
assert true, EmailAddress.valid?("w.-asdf-_@hotmail.com") # #8
|
111
132
|
assert true, EmailAddress.valid?("first_last@hotmail.com") # #8
|
112
133
|
end
|
113
134
|
|
114
135
|
def test_issue9
|
115
|
-
assert !
|
116
|
-
assert !
|
117
|
-
assert !
|
136
|
+
assert !EmailAddress.valid?("example.user@foo.")
|
137
|
+
assert !EmailAddress.valid?("ogog@sss.c")
|
138
|
+
assert !EmailAddress.valid?("example.user@foo.com/")
|
118
139
|
end
|
119
140
|
|
120
141
|
def test_relaxed_normal
|
121
|
-
assert !
|
122
|
-
assert true, EmailAddress.new(
|
142
|
+
assert !EmailAddress.new("a.c.m.e.-industries@foo.com").valid?
|
143
|
+
assert true, EmailAddress.new("a.c.m.e.-industries@foo.com", local_format: :relaxed).valid?
|
123
144
|
end
|
124
145
|
|
125
146
|
def test_nil_address
|
@@ -1,25 +1,25 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative "../test_helper"
|
2
2
|
|
3
3
|
class TestConfig < MiniTest::Test
|
4
4
|
def test_setting
|
5
|
-
assert_equal :mx,
|
5
|
+
assert_equal :mx, EmailAddress::Config.setting(:dns_lookup)
|
6
6
|
assert_equal :off, EmailAddress::Config.setting(:dns_lookup, :off)
|
7
7
|
assert_equal :off, EmailAddress::Config.setting(:dns_lookup)
|
8
8
|
EmailAddress::Config.setting(:dns_lookup, :mx)
|
9
9
|
end
|
10
10
|
|
11
11
|
def test_configure
|
12
|
-
assert_equal :mx,
|
13
|
-
assert_equal true,
|
14
|
-
EmailAddress::Config.configure(local_downcase:false, dns_lookup: :off)
|
15
|
-
assert_equal :off,
|
12
|
+
assert_equal :mx, EmailAddress::Config.setting(:dns_lookup)
|
13
|
+
assert_equal true, EmailAddress::Config.setting(:local_downcase)
|
14
|
+
EmailAddress::Config.configure(local_downcase: false, dns_lookup: :off)
|
15
|
+
assert_equal :off, EmailAddress::Config.setting(:dns_lookup)
|
16
16
|
assert_equal false, EmailAddress::Config.setting(:local_downcase)
|
17
|
-
EmailAddress::Config.configure(local_downcase:true, dns_lookup: :mx)
|
17
|
+
EmailAddress::Config.configure(local_downcase: true, dns_lookup: :mx)
|
18
18
|
end
|
19
19
|
|
20
20
|
def test_provider
|
21
21
|
assert_nil EmailAddress::Config.provider(:github)
|
22
|
-
EmailAddress::Config.provider(:github, host_match: %w
|
22
|
+
EmailAddress::Config.provider(:github, host_match: %w[github.com], local_format: :standard)
|
23
23
|
assert_equal :standard, EmailAddress::Config.provider(:github)[:local_format]
|
24
24
|
assert_equal :github, EmailAddress::Host.new("github.com").provider
|
25
25
|
EmailAddress::Config.providers.delete(:github)
|
@@ -1,13 +1,12 @@
|
|
1
|
-
|
2
|
-
require_relative '../test_helper'
|
1
|
+
require_relative "../test_helper"
|
3
2
|
|
4
3
|
class TestExchanger < MiniTest::Test
|
5
4
|
def test_exchanger
|
6
5
|
e = EmailAddress::Exchanger.new("gmail.com")
|
7
6
|
assert_equal true, e.mxers.size > 1
|
8
7
|
assert_equal :google, e.provider
|
9
|
-
assert_equal
|
10
|
-
assert_equal
|
8
|
+
assert_equal "google.com", e.domains.first
|
9
|
+
assert_equal "google.com", e.matches?("google.com")
|
11
10
|
assert_equal false, e.matches?("fa00:1450:4013:c01::1a/16")
|
12
11
|
assert_equal false, e.matches?("127.0.0.1/24")
|
13
12
|
assert_equal true, e.mx_ips.size > 1
|
@@ -18,8 +17,8 @@ class TestExchanger < MiniTest::Test
|
|
18
17
|
assert_equal 0, e.mxers.size
|
19
18
|
end
|
20
19
|
|
21
|
-
|
22
|
-
#def test_dns
|
20
|
+
# assert_equal true, a.has_dns_a_record? # example.com has no MX'ers
|
21
|
+
# def test_dns
|
23
22
|
# good = EmailAddress::Exchanger.new("gmail.com")
|
24
23
|
# bad = EmailAddress::Exchanger.new("exampldkeie4iufe.com")
|
25
24
|
# assert_equal true, good.has_dns_a_record?
|
@@ -27,5 +26,5 @@ class TestExchanger < MiniTest::Test
|
|
27
26
|
# assert_equal "gmail.com", good.dns_a_record.first
|
28
27
|
# assert(/google.com\z/, good.mxers.first.first)
|
29
28
|
# #assert_equal 'google.com', good.domains.first
|
30
|
-
#end
|
29
|
+
# end
|
31
30
|
end
|
@@ -110,7 +110,8 @@ class TestHost < MiniTest::Test
|
|
110
110
|
end
|
111
111
|
|
112
112
|
def test_hosted_service
|
113
|
-
|
113
|
+
# Is there a gmail-hosted domain that will continue to exist? Removing until then
|
114
|
+
# assert EmailAddress.valid?("test@jiff.com", dns_lookup: :mx)
|
114
115
|
assert !EmailAddress.valid?("test@gmail.com", dns_lookup: :mx)
|
115
116
|
end
|
116
117
|
|
@@ -1,22 +1,20 @@
|
|
1
|
-
|
2
|
-
require_relative '../test_helper'
|
1
|
+
require_relative "../test_helper"
|
3
2
|
|
4
3
|
class TestLocal < MiniTest::Test
|
5
|
-
|
6
4
|
def test_valid_standard
|
7
5
|
[ # Via https://en.wikipedia.org/wiki/Email_address
|
8
|
-
%
|
9
|
-
%
|
10
|
-
%
|
11
|
-
%
|
12
|
-
%
|
13
|
-
%
|
14
|
-
%
|
15
|
-
%
|
16
|
-
%
|
17
|
-
%
|
18
|
-
%
|
19
|
-
%
|
6
|
+
%(prettyandsimple),
|
7
|
+
%(very.common),
|
8
|
+
%(disposable.style.email.with+symbol),
|
9
|
+
%(other.email-with-dash),
|
10
|
+
%("much.more unusual"),
|
11
|
+
%{"(comment)very.unusual.@.unusual.com"},
|
12
|
+
%(#!$%&'*+-/=?^_`{}|~),
|
13
|
+
%(" "),
|
14
|
+
%{"very.(),:;<>[]\\".VERY.\\"very@\\ \\"very\\".unusual"},
|
15
|
+
%{"()<>[]:,;@\\\"!#$%&'*+-/=?^_`{}| ~.a"},
|
16
|
+
%(token." ".token),
|
17
|
+
%(abc."defghi".xyz)
|
20
18
|
].each do |local|
|
21
19
|
assert EmailAddress::Local.new(local, local_fix: false).standard?, local
|
22
20
|
end
|
@@ -24,15 +22,15 @@ class TestLocal < MiniTest::Test
|
|
24
22
|
|
25
23
|
def test_invalid_standard
|
26
24
|
[ # Via https://en.wikipedia.org/wiki/Email_address
|
27
|
-
%
|
28
|
-
%
|
29
|
-
%
|
30
|
-
%
|
31
|
-
%
|
32
|
-
%
|
33
|
-
%
|
34
|
-
%
|
35
|
-
%
|
25
|
+
%(A@b@c),
|
26
|
+
%{a"b(c)d,e:f;g<h>i[j\k]l},
|
27
|
+
%(just"not"right),
|
28
|
+
%(this is"not\allowed),
|
29
|
+
%(this\ still\"not\\allowed),
|
30
|
+
%(john..doe),
|
31
|
+
%( invalid),
|
32
|
+
%(invalid ),
|
33
|
+
%(abc"defghi"xyz)
|
36
34
|
].each do |local|
|
37
35
|
assert_equal false, EmailAddress::Local.new(local, local_fix: false).standard?, local
|
38
36
|
end
|
@@ -46,22 +44,21 @@ class TestLocal < MiniTest::Test
|
|
46
44
|
end
|
47
45
|
|
48
46
|
def test_unicode
|
49
|
-
assert !
|
47
|
+
assert !EmailAddress::Local.new("üñîçøðé1", local_encoding: :ascii).standard?, "not üñîçøðé1"
|
50
48
|
assert EmailAddress::Local.new("üñîçøðé2", local_encoding: :unicode).standard?, "üñîçøðé2"
|
51
49
|
assert EmailAddress::Local.new("test", local_encoding: :unicode).valid?, "unicode should include ascii"
|
52
|
-
assert !
|
50
|
+
assert !EmailAddress::Local.new("üñîçøðé3").valid?, "üñîçøðé3 valid"
|
53
51
|
end
|
54
52
|
|
55
|
-
|
56
53
|
def test_valid_conventional
|
57
|
-
%w
|
54
|
+
%w[first.last first First+Tag o'brien].each do |local|
|
58
55
|
assert EmailAddress::Local.new(local).conventional?, local
|
59
56
|
end
|
60
57
|
end
|
61
58
|
|
62
59
|
def test_invalid_conventional
|
63
|
-
(%w
|
64
|
-
assert !
|
60
|
+
(%w[first;.last +leading trailing+ o%brien] + ["first space"]).each do |local|
|
61
|
+
assert !EmailAddress::Local.new(local, local_fix: false).conventional?, local
|
65
62
|
end
|
66
63
|
end
|
67
64
|
|
@@ -72,8 +69,8 @@ class TestLocal < MiniTest::Test
|
|
72
69
|
|
73
70
|
def test_format
|
74
71
|
assert_equal :conventional, EmailAddress::Local.new("can1").format?
|
75
|
-
assert_equal :standard, EmailAddress::Local.new(%
|
76
|
-
assert_equal "can1", EmailAddress::Local.new(%
|
72
|
+
assert_equal :standard, EmailAddress::Local.new(%("can1")).format?
|
73
|
+
assert_equal "can1", EmailAddress::Local.new(%{"can1(commment)"}).format(:conventional)
|
77
74
|
end
|
78
75
|
|
79
76
|
def test_redacted
|
@@ -84,9 +81,9 @@ class TestLocal < MiniTest::Test
|
|
84
81
|
|
85
82
|
def test_matches
|
86
83
|
a = EmailAddress.new("User+tag@gmail.com")
|
87
|
-
assert_equal false,
|
88
|
-
assert_equal false,
|
89
|
-
assert_equal
|
84
|
+
assert_equal false, a.matches?("user")
|
85
|
+
assert_equal false, a.matches?("user@")
|
86
|
+
assert_equal "user*@", a.matches?("user*@")
|
90
87
|
end
|
91
88
|
|
92
89
|
def test_munge
|
@@ -105,4 +102,11 @@ class TestLocal < MiniTest::Test
|
|
105
102
|
assert EmailAddress.valid?("username_____@gmail.com")
|
106
103
|
end
|
107
104
|
|
105
|
+
def test_tag_punctuation
|
106
|
+
assert EmailAddress.valid?("first.last+foo.bar@gmail.com")
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_relaxed_tag
|
110
|
+
assert EmailAddress.valid? "foo+abc@example.com", host_validation: :syntax, local_format: :relaxed
|
111
|
+
end
|
108
112
|
end
|
@@ -1,14 +1,11 @@
|
|
1
|
-
|
2
|
-
require_relative '../test_helper'
|
1
|
+
require_relative "../test_helper"
|
3
2
|
|
4
3
|
class TestRewriter < Minitest::Test
|
5
|
-
|
6
4
|
def test_srs
|
7
|
-
ea= "first.LAST+tag@gmail.com"
|
5
|
+
ea = "first.LAST+tag@gmail.com"
|
8
6
|
e = EmailAddress.new(ea)
|
9
7
|
s = e.srs("example.com")
|
10
8
|
assert s.match(EmailAddress::Address::SRS_FORMAT_REGEX)
|
11
9
|
assert EmailAddress.new(s).to_s == e.to_s
|
12
10
|
end
|
13
|
-
|
14
11
|
end
|
data/test/test_aliasing.rb
CHANGED
data/test/test_email_address.rb
CHANGED
@@ -1,44 +1,41 @@
|
|
1
|
-
|
2
|
-
require_relative 'test_helper'
|
1
|
+
require_relative "test_helper"
|
3
2
|
|
4
3
|
class TestEmailAddress < MiniTest::Test
|
5
|
-
|
6
4
|
def test_new
|
7
|
-
a = EmailAddress.new(
|
8
|
-
assert_equal
|
9
|
-
assert_equal
|
5
|
+
a = EmailAddress.new("user@example.com")
|
6
|
+
assert_equal "user", a.local.to_s
|
7
|
+
assert_equal "example.com", a.host.to_s
|
10
8
|
end
|
11
9
|
|
12
10
|
def test_canonical
|
13
|
-
assert_equal "firstlast@gmail.com", EmailAddress.canonical(
|
14
|
-
a = EmailAddress.new_canonical(
|
15
|
-
assert_equal
|
11
|
+
assert_equal "firstlast@gmail.com", EmailAddress.canonical("First.Last+TAG@gmail.com")
|
12
|
+
a = EmailAddress.new_canonical("First.Last+TAG@gmail.com")
|
13
|
+
assert_equal "firstlast", a.local.to_s
|
16
14
|
end
|
17
15
|
|
18
16
|
def test_normal
|
19
|
-
assert_equal
|
17
|
+
assert_equal "user+tag@gmail.com", EmailAddress.normal("USER+TAG@GMAIL.com")
|
20
18
|
end
|
21
19
|
|
22
20
|
def test_valid
|
23
|
-
assert_equal true, EmailAddress.valid?(
|
24
|
-
assert_equal true, EmailAddress.valid?(
|
21
|
+
assert_equal true, EmailAddress.valid?("user@yahoo.com")
|
22
|
+
assert_equal true, EmailAddress.valid?("a@yahoo.com")
|
25
23
|
end
|
26
24
|
|
27
25
|
def test_matches
|
28
|
-
assert_equal
|
26
|
+
assert_equal "yahoo.", EmailAddress.matches?("user@yahoo.com", "yahoo.")
|
29
27
|
end
|
30
28
|
|
31
29
|
def test_reference
|
32
|
-
assert_equal
|
30
|
+
assert_equal "dfeafc750cecde54f9a4775f5713bf01", EmailAddress.reference("user@yahoo.com")
|
33
31
|
end
|
34
32
|
|
35
33
|
def test_redact
|
36
|
-
assert_equal
|
34
|
+
assert_equal "{e037b6c476357f34f92b8f35b25d179a4f573f1e}@yahoo.com", EmailAddress.redact("user@yahoo.com")
|
37
35
|
end
|
38
36
|
|
39
37
|
def test_cases
|
40
|
-
%w
|
41
|
-
).each do |address|
|
38
|
+
%w[miles.o'brien@yahoo.com first.last@gmail.com a-b.c_d+e@f.gx].each do |address|
|
42
39
|
assert EmailAddress.valid?(address, host_validation: :syntax), "valid?(#{address})"
|
43
40
|
end
|
44
41
|
end
|
@@ -47,5 +44,4 @@ class TestEmailAddress < MiniTest::Test
|
|
47
44
|
assert_equal "", EmailAddress.normal("")
|
48
45
|
assert_equal "", EmailAddress.normal(" ")
|
49
46
|
end
|
50
|
-
|
51
47
|
end
|
data/test/test_helper.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__),
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
2
2
|
|
3
|
-
require
|
3
|
+
require "pry"
|
4
|
+
require "simplecov"
|
4
5
|
SimpleCov.start
|
5
6
|
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
7
|
+
require "active_record"
|
8
|
+
require "rubygems"
|
9
|
+
require "minitest/autorun"
|
10
|
+
require "minitest/unit"
|
11
|
+
require "minitest/pride"
|
12
|
+
require "email_address"
|