email_address 0.0.3 → 0.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 +10 -0
- data/Gemfile +0 -1
- data/README.md +451 -197
- data/Rakefile +4 -9
- data/email_address.gemspec +9 -5
- data/lib/email_address.rb +55 -24
- data/lib/email_address/active_record_validator.rb +5 -5
- data/lib/email_address/address.rb +152 -72
- data/lib/email_address/canonical_email_address_type.rb +46 -0
- data/lib/email_address/config.rb +148 -64
- data/lib/email_address/email_address_type.rb +15 -31
- data/lib/email_address/exchanger.rb +31 -34
- data/lib/email_address/host.rb +327 -51
- data/lib/email_address/local.rb +304 -52
- data/lib/email_address/version.rb +1 -1
- data/test/activerecord/test_ar.rb +22 -0
- data/test/activerecord/user.rb +71 -0
- data/test/email_address/test_address.rb +53 -27
- data/test/email_address/test_config.rb +23 -8
- data/test/email_address/test_exchanger.rb +22 -10
- data/test/email_address/test_host.rb +47 -6
- data/test/email_address/test_local.rb +80 -16
- data/test/test_email_address.rb +38 -4
- data/test/test_helper.rb +7 -5
- metadata +68 -34
- data/lib/email_address/domain_matcher.rb +0 -98
- data/lib/email_address/domain_parser.rb +0 -69
- data/lib/email_address/matcher.rb +0 -119
- data/lib/email_address/validator.rb +0 -141
- data/test/email_address/test_domain_matcher.rb +0 -21
- data/test/email_address/test_domain_parser.rb +0 -29
- data/test/email_address/test_matcher.rb +0 -44
- data/test/email_address/test_validator.rb +0 -16
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require_relative '../test_helper'
|
3
|
+
|
4
|
+
class TestAR < MiniTest::Test
|
5
|
+
require_relative 'user.rb'
|
6
|
+
|
7
|
+
def test_validation
|
8
|
+
user = User.new(email:"Pat.Jones+ASDF#GMAIL.com")
|
9
|
+
assert_equal false, user.valid?
|
10
|
+
user = User.new(email:"Pat.Jones+ASDF@GMAIL.com")
|
11
|
+
assert_equal true, user.valid?
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_datatype
|
15
|
+
if defined?(ActiveRecord) && ::ActiveRecord::VERSION::MAJOR >= 5
|
16
|
+
user = User.new(email:"Pat.Jones+ASDF@GMAIL.com")
|
17
|
+
assert_equal 'pat.jones+asdf@gmail.com', user.email
|
18
|
+
assert_equal 'patjones@gmail.com', user.canonical_email
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
################################################################################
|
2
|
+
# ActiveRecord Test Setup ...
|
3
|
+
################################################################################
|
4
|
+
|
5
|
+
class ApplicationRecord < ActiveRecord::Base
|
6
|
+
self.abstract_class = true
|
7
|
+
end
|
8
|
+
|
9
|
+
dbfile = ENV['EMAIL_ADDRESS_TEST_DB'] || "/tmp/email_address.gem.db"
|
10
|
+
File.unlink(dbfile) if File.exist?(dbfile)
|
11
|
+
|
12
|
+
# Connection: JRuby vs. MRI
|
13
|
+
if RUBY_PLATFORM == 'java' # jruby
|
14
|
+
require 'jdbc/sqlite3'
|
15
|
+
require 'java'
|
16
|
+
require 'activerecord-jdbcsqlite3-adapter'
|
17
|
+
Jdbc::SQLite3.load_driver
|
18
|
+
ActiveRecord::Base.establish_connection(
|
19
|
+
:adapter => 'jdbc',
|
20
|
+
:driver => "org.sqlite.JDBC",
|
21
|
+
:url => "jdbc:sqlite:" + dbfile
|
22
|
+
)
|
23
|
+
else
|
24
|
+
require 'sqlite3'
|
25
|
+
ActiveRecord::Base.establish_connection(
|
26
|
+
:adapter => 'sqlite3',
|
27
|
+
:database => dbfile
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
ApplicationRecord.connection.execute(
|
32
|
+
"create table users ( email varchar, canonical_email varchar)")
|
33
|
+
|
34
|
+
if defined?(ActiveRecord) && ::ActiveRecord::VERSION::MAJOR >= 5
|
35
|
+
ActiveRecord::Type.register(:email_address, EmailAddress::EmailAddressType)
|
36
|
+
ActiveRecord::Type.register(:canonical_email_address,
|
37
|
+
EmailAddress::CanonicalEmailAddressType)
|
38
|
+
end
|
39
|
+
|
40
|
+
################################################################################
|
41
|
+
# User Model
|
42
|
+
################################################################################
|
43
|
+
|
44
|
+
class User < ApplicationRecord
|
45
|
+
|
46
|
+
if defined?(ActiveRecord) && ::ActiveRecord::VERSION::MAJOR >= 5
|
47
|
+
attribute :email, :email_address
|
48
|
+
attribute :canonical_email, :canonical_email_address
|
49
|
+
end
|
50
|
+
|
51
|
+
validates_with EmailAddress::ActiveRecordValidator,
|
52
|
+
fields: %i(email canonical_email)
|
53
|
+
|
54
|
+
def email=(email_address)
|
55
|
+
self[:canonical_email] = email_address
|
56
|
+
self[:email] = email_address
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.find_by_email(email)
|
60
|
+
user = self.find_by(email: EmailAddress.normal(email))
|
61
|
+
user ||= self.find_by(canonical_email: EmailAddress.canonical(email))
|
62
|
+
user ||= self.find_by(canonical_email: EmailAddress.redacted(email))
|
63
|
+
user
|
64
|
+
end
|
65
|
+
|
66
|
+
def redact!
|
67
|
+
self[:canonical_email] = EmailAddress.redact(self.canonical_email)
|
68
|
+
self[:email] = self[:canonical_email]
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
@@ -6,47 +6,73 @@ class TestAddress < Minitest::Test
|
|
6
6
|
a = EmailAddress.new("User+tag@example.com")
|
7
7
|
assert_equal "user+tag", a.local.to_s
|
8
8
|
assert_equal "example.com", a.host.to_s
|
9
|
-
assert_equal
|
9
|
+
assert_equal "us*****@ex*****", a.munge
|
10
|
+
assert_equal :default, a.provider
|
10
11
|
end
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
|
13
|
+
# LOCAL
|
14
|
+
def test_local
|
15
|
+
a = EmailAddress.new("User+tag@example.com")
|
16
|
+
assert_equal "user", a.mailbox
|
17
|
+
assert_equal "user+tag", a.left
|
18
|
+
assert_equal "tag", a.tag
|
19
|
+
end
|
20
|
+
|
21
|
+
# HOST
|
22
|
+
def test_host
|
23
|
+
a = EmailAddress.new("User+tag@example.com")
|
24
|
+
assert_equal "example.com", a.hostname
|
25
|
+
#assert_equal :default, a.provider
|
15
26
|
end
|
16
27
|
|
17
|
-
|
18
|
-
|
28
|
+
# ADDRESS
|
29
|
+
def test_forms
|
30
|
+
a = EmailAddress.new("User+tag@example.com")
|
31
|
+
assert_equal "user+tag@example.com", a.to_s
|
19
32
|
assert_equal "user@example.com", a.canonical
|
20
|
-
|
21
|
-
assert_equal "
|
33
|
+
assert_equal "{63a710569261a24b3766275b7000ce8d7b32e2f7}@example.com", a.redact
|
34
|
+
assert_equal "b58996c504c5638798eb6b511e6f49af", a.reference
|
35
|
+
end
|
36
|
+
|
37
|
+
# COMPARISON & MATCHING
|
38
|
+
def test_compare
|
39
|
+
a = ("User+tag@example.com")
|
40
|
+
#e = EmailAddress.new("user@example.com")
|
41
|
+
n = EmailAddress.new(a)
|
42
|
+
c = EmailAddress.new_canonical(a)
|
43
|
+
#r = EmailAddress.new_redacted(a)
|
44
|
+
assert_equal true, n == "user+tag@example.com"
|
45
|
+
assert_equal true, n > "b@example.com"
|
46
|
+
assert_equal true, n.same_as?(c)
|
47
|
+
assert_equal true, n.same_as?(a)
|
22
48
|
end
|
23
49
|
|
24
|
-
def
|
25
|
-
a = EmailAddress.new("User+tag@
|
26
|
-
assert_equal
|
27
|
-
assert_equal
|
28
|
-
assert_equal
|
50
|
+
def test_matches
|
51
|
+
a = EmailAddress.new("User+tag@gmail.com")
|
52
|
+
assert_equal false, a.matches?('mail.com')
|
53
|
+
assert_equal 'google', a.matches?('google')
|
54
|
+
assert_equal 'user+tag@', a.matches?('user+tag@')
|
55
|
+
assert_equal 'user*@gmail*', a.matches?('user*@gmail*')
|
29
56
|
end
|
30
57
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
58
|
+
# VALIDATION
|
59
|
+
def test_valid
|
60
|
+
assert EmailAddress.valid?("User+tag@example.com", dns_lookup: :a), "valid 1"
|
61
|
+
assert ! EmailAddress.valid?("User%tag@example.com", dns_lookup: :a), "valid 2"
|
62
|
+
assert EmailAddress.new("ɹᴉɐℲuǝll∀@ɹᴉɐℲuǝll∀.ws", local_encoding: :uncode, dns_lookup: :off ), "valid unicode"
|
35
63
|
end
|
36
64
|
|
37
65
|
def test_no_domain
|
38
66
|
e = EmailAddress.new("User+tag.gmail.ws")
|
39
|
-
assert_equal
|
67
|
+
assert_equal '', e.hostname
|
68
|
+
assert_equal false, e.valid? # localhost not allowed by default
|
40
69
|
end
|
41
70
|
|
42
|
-
def
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
assert a < b
|
48
|
-
assert b > a
|
49
|
-
assert a.same_as?(b)
|
50
|
-
assert a.same_as?(c)
|
71
|
+
def test_regexen
|
72
|
+
assert "First.Last+TAG@example.com".match(EmailAddress::Address::CONVENTIONAL_REGEX)
|
73
|
+
assert "First.Last+TAG@example.com".match(EmailAddress::Address::STANDARD_REGEX)
|
74
|
+
assert_equal nil, "First.Last+TAGexample.com".match(EmailAddress::Address::STANDARD_REGEX)
|
75
|
+
assert_equal nil, "First#Last+TAGexample.com".match(EmailAddress::Address::CONVENTIONAL_REGEX)
|
51
76
|
end
|
77
|
+
|
52
78
|
end
|
@@ -1,13 +1,28 @@
|
|
1
1
|
require_relative '../test_helper'
|
2
2
|
|
3
3
|
class TestConfig < MiniTest::Test
|
4
|
-
def
|
5
|
-
EmailAddress::Config.
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
def test_setting
|
5
|
+
assert_equal :mx, EmailAddress::Config.setting(:dns_lookup)
|
6
|
+
assert_equal :off, EmailAddress::Config.setting(:dns_lookup, :off)
|
7
|
+
assert_equal :off, EmailAddress::Config.setting(:dns_lookup)
|
8
|
+
EmailAddress::Config.setting(:dns_lookup, :mx)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_configure
|
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
|
+
assert_equal false, EmailAddress::Config.setting(:local_downcase)
|
17
|
+
EmailAddress::Config.configure(local_downcase:true, dns_lookup: :mx)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_provider
|
21
|
+
assert_equal nil, EmailAddress::Config.provider(:github)
|
22
|
+
EmailAddress::Config.provider(:github, host_match: %w(github.com), local_format: :standard)
|
23
|
+
assert_equal :standard, EmailAddress::Config.provider(:github)[:local_format]
|
24
|
+
assert_equal :github, EmailAddress::Host.new("github.com").provider
|
25
|
+
EmailAddress::Config.providers.delete(:github)
|
26
|
+
assert_equal nil, EmailAddress::Config.provider(:github)
|
11
27
|
end
|
12
|
-
|
13
28
|
end
|
@@ -3,17 +3,29 @@ require_relative '../test_helper'
|
|
3
3
|
|
4
4
|
class TestExchanger < MiniTest::Test
|
5
5
|
def test_exchanger
|
6
|
-
|
7
|
-
assert_equal true,
|
6
|
+
e = EmailAddress::Exchanger.new("gmail.com")
|
7
|
+
assert_equal true, e.mxers.size > 1
|
8
|
+
assert_equal :google, e.provider
|
9
|
+
assert_equal 'google.com', e.domains.first
|
10
|
+
assert_equal 'google.com', e.matches?("google.com")
|
11
|
+
assert_equal false, e.matches?("fa00:1450:4013:c01::1a/16")
|
12
|
+
assert_equal false, e.matches?("127.0.0.1/24")
|
13
|
+
assert_equal true, e.mx_ips.size > 1
|
8
14
|
end
|
9
15
|
|
10
|
-
def
|
11
|
-
|
12
|
-
|
13
|
-
assert_equal true, good.has_dns_a_record?
|
14
|
-
assert_equal false, bad.has_dns_a_record?
|
15
|
-
assert_equal "gmail.com", good.dns_a_record.first
|
16
|
-
assert(/google.com\z/, good.mxers.first.first)
|
17
|
-
assert_equal 'google.com', good.domains.first
|
16
|
+
def test_not_found
|
17
|
+
e = EmailAddress::Exchanger.new("oops.gmail.com")
|
18
|
+
assert_equal 0, e.mxers.size
|
18
19
|
end
|
20
|
+
|
21
|
+
#assert_equal true, a.has_dns_a_record? # example.com has no MX'ers
|
22
|
+
#def test_dns
|
23
|
+
# good = EmailAddress::Exchanger.new("gmail.com")
|
24
|
+
# bad = EmailAddress::Exchanger.new("exampldkeie4iufe.com")
|
25
|
+
# assert_equal true, good.has_dns_a_record?
|
26
|
+
# assert_equal false, bad.has_dns_a_record?
|
27
|
+
# assert_equal "gmail.com", good.dns_a_record.first
|
28
|
+
# assert(/google.com\z/, good.mxers.first.first)
|
29
|
+
# #assert_equal 'google.com', good.domains.first
|
30
|
+
#end
|
19
31
|
end
|
@@ -9,7 +9,8 @@ class TestHost < MiniTest::Test
|
|
9
9
|
assert_equal "example.com", a.domain_name
|
10
10
|
assert_equal "example", a.registration_name
|
11
11
|
assert_equal "com", a.tld
|
12
|
-
assert_equal "", a.
|
12
|
+
assert_equal "ex*****", a.munge
|
13
|
+
assert_equal nil, a.subdomains
|
13
14
|
end
|
14
15
|
|
15
16
|
def test_foreign_host
|
@@ -17,27 +18,28 @@ class TestHost < MiniTest::Test
|
|
17
18
|
assert_equal "my.yahoo.co.jp", a.host_name
|
18
19
|
assert_equal "yahoo.co.jp", a.domain_name
|
19
20
|
assert_equal "yahoo", a.registration_name
|
20
|
-
assert_equal "co.jp", a.
|
21
|
+
assert_equal "co.jp", a.tld2
|
21
22
|
assert_equal "my", a.subdomains
|
22
23
|
end
|
23
24
|
|
24
25
|
def test_ip_host
|
25
26
|
a = EmailAddress::Host.new("[127.0.0.1]")
|
26
|
-
assert_equal "[127.0.0.1]", a.
|
27
|
+
assert_equal "[127.0.0.1]", a.name
|
27
28
|
assert_equal "127.0.0.1", a.ip_address
|
28
|
-
|
29
29
|
end
|
30
30
|
|
31
31
|
def test_unicode_host
|
32
32
|
a = EmailAddress::Host.new("å.com")
|
33
|
-
assert_equal "xn--5ca.com", a.
|
33
|
+
assert_equal "xn--5ca.com", a.dns_name
|
34
|
+
a = EmailAddress::Host.new("xn--5ca.com", host_encoding: :unicode)
|
35
|
+
assert_equal "å.com", a.to_s
|
34
36
|
end
|
35
37
|
|
36
38
|
def test_provider
|
37
39
|
a = EmailAddress::Host.new("my.yahoo.co.jp")
|
38
40
|
assert_equal :yahoo, a.provider
|
39
41
|
a = EmailAddress::Host.new("example.com")
|
40
|
-
assert_equal :
|
42
|
+
assert_equal :default, a.provider
|
41
43
|
end
|
42
44
|
|
43
45
|
def test_dmarc
|
@@ -46,4 +48,43 @@ class TestHost < MiniTest::Test
|
|
46
48
|
d = EmailAddress::Host.new("example.com").dmarc
|
47
49
|
assert_equal true, d.empty?
|
48
50
|
end
|
51
|
+
|
52
|
+
def test_ipv4
|
53
|
+
h = EmailAddress::Host.new("[127.0.0.1]", host_allow_ip:true)
|
54
|
+
assert_equal "127.0.0.1", h.ip_address
|
55
|
+
assert_equal true, h.valid?
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_ipv6
|
59
|
+
h = EmailAddress::Host.new("[IPv6:::1]", host_allow_ip:true)
|
60
|
+
assert_equal "::1", h.ip_address
|
61
|
+
assert_equal true, h.valid?
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_comment
|
65
|
+
h = EmailAddress::Host.new("(oops)gmail.com")
|
66
|
+
assert_equal 'gmail.com', h.to_s
|
67
|
+
assert_equal 'oops', h.comment
|
68
|
+
h = EmailAddress::Host.new("gmail.com(oops)")
|
69
|
+
assert_equal 'gmail.com', h.to_s
|
70
|
+
assert_equal 'oops', h.comment
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_matches
|
74
|
+
h = EmailAddress::Host.new("yahoo.co.jp")
|
75
|
+
assert_equal false, h.matches?("gmail.com")
|
76
|
+
assert_equal 'yahoo.co.jp', h.matches?("yahoo.co.jp")
|
77
|
+
assert_equal '.co.jp', h.matches?(".co.jp")
|
78
|
+
assert_equal '.jp', h.matches?(".jp")
|
79
|
+
assert_equal 'yahoo.', h.matches?("yahoo.")
|
80
|
+
assert_equal 'yah*.jp', h.matches?("yah*.jp")
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_regexen
|
84
|
+
assert "asdf.com".match EmailAddress::Host::CANONICAL_HOST_REGEX
|
85
|
+
assert "xn--5ca.com".match EmailAddress::Host::CANONICAL_HOST_REGEX
|
86
|
+
assert "[127.0.0.1]".match EmailAddress::Host::STANDARD_HOST_REGEX
|
87
|
+
assert "[IPv6:2001:dead::1]".match EmailAddress::Host::STANDARD_HOST_REGEX
|
88
|
+
assert_equal nil, "[256.0.0.1]".match(EmailAddress::Host::STANDARD_HOST_REGEX)
|
89
|
+
end
|
49
90
|
end
|
@@ -2,30 +2,94 @@
|
|
2
2
|
require_relative '../test_helper'
|
3
3
|
|
4
4
|
class TestLocal < MiniTest::Test
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
|
6
|
+
def test_valid_standard
|
7
|
+
[ # Via https://en.wikipedia.org/wiki/Email_address
|
8
|
+
%Q{prettyandsimple},
|
9
|
+
%Q{very.common},
|
10
|
+
%Q{disposable.style.email.with+symbol},
|
11
|
+
%Q{other.email-with-dash},
|
12
|
+
%Q{"much.more unusual"},
|
13
|
+
%Q{"(comment)very.unusual.@.unusual.com"},
|
14
|
+
%Q{#!$%&'*+-/=?^_`{}|~},
|
15
|
+
%Q{" "},
|
16
|
+
%Q{"very.(),:;<>[]\\".VERY.\\"very@\\ \\"very\\".unusual"},
|
17
|
+
%Q{"()<>[]:,;@\\\"!#$%&'*+-/=?^_`{}| ~.a"},
|
18
|
+
%Q{token." ".token},
|
19
|
+
%Q{abc."defghi".xyz},
|
20
|
+
].each do |local|
|
21
|
+
assert EmailAddress::Local.new(local, local_fix: false).standard?, local
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_invalid_standard
|
26
|
+
[ # Via https://en.wikipedia.org/wiki/Email_address
|
27
|
+
%Q{A@b@c},
|
28
|
+
%Q{a"b(c)d,e:f;g<h>i[j\k]l},
|
29
|
+
%Q{just"not"right},
|
30
|
+
%Q{this is"not\allowed},
|
31
|
+
%Q{this\ still\"not\\allowed},
|
32
|
+
%Q{john..doe},
|
33
|
+
%Q{ invalid},
|
34
|
+
%Q{invalid },
|
35
|
+
%Q{abc"defghi"xyz},
|
36
|
+
].each do |local|
|
37
|
+
assert_equal false, EmailAddress::Local.new(local, local_fix: false).standard?, local
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_relaxed
|
42
|
+
assert EmailAddress::Local.new("first..last", local_format: :relaxed).valid?, "relax.."
|
43
|
+
assert EmailAddress::Local.new("first.-last", local_format: :relaxed).valid?, "relax.-"
|
44
|
+
assert EmailAddress::Local.new("a", local_format: :relaxed).valid?, "relax single"
|
45
|
+
assert ! EmailAddress::Local.new("firstlast_", local_format: :relaxed).valid?, "last_"
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_unicode
|
49
|
+
assert ! EmailAddress::Local.new("üñîçøðé1", local_encoding: :ascii).standard?, "not üñîçøðé1"
|
50
|
+
assert EmailAddress::Local.new("üñîçøðé2", local_encoding: :unicode).standard?, "üñîçøðé2"
|
51
|
+
assert ! EmailAddress::Local.new("üñîçøðé3").valid?, "üñîçøðé3 valid"
|
8
52
|
end
|
9
53
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
54
|
+
|
55
|
+
def test_valid_conventional
|
56
|
+
%w( first.last first First+Tag o'brien).each do |local|
|
57
|
+
assert EmailAddress::Local.new(local).conventional?, local
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_invalid_conventional
|
62
|
+
(%w( first;.last +leading trailing+ o%brien) + ["first space"]).each do |local|
|
63
|
+
assert ! EmailAddress::Local.new(local, local_fix:false).conventional?, local
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_valid
|
68
|
+
assert_equal false, EmailAddress::Local.new("first(comment)", local_format: :conventional).valid?
|
69
|
+
assert_equal true, EmailAddress::Local.new("first(comment)", local_format: :standard).valid?
|
15
70
|
end
|
16
71
|
|
17
72
|
def test_format
|
18
|
-
|
19
|
-
assert_equal
|
73
|
+
assert_equal :conventional, EmailAddress::Local.new("can1").format?
|
74
|
+
assert_equal :standard, EmailAddress::Local.new(%Q{"can1"}).format?
|
75
|
+
assert_equal "can1", EmailAddress::Local.new(%Q{"can1(commment)"}).format(:conventional)
|
20
76
|
end
|
21
77
|
|
22
|
-
def
|
23
|
-
|
24
|
-
|
78
|
+
def test_redacted
|
79
|
+
l = "{bea3f3560a757f8142d38d212a931237b218eb5e}"
|
80
|
+
assert EmailAddress::Local.redacted?(l), "redacted? #{l}"
|
81
|
+
assert_equal :redacted, EmailAddress::Local.new(l).format?
|
25
82
|
end
|
26
83
|
|
27
|
-
def
|
28
|
-
a = EmailAddress
|
29
|
-
assert_equal
|
84
|
+
def test_matches
|
85
|
+
a = EmailAddress.new("User+tag@gmail.com")
|
86
|
+
assert_equal false, a.matches?('user')
|
87
|
+
assert_equal false, a.matches?('user@')
|
88
|
+
assert_equal 'user*@', a.matches?('user*@')
|
30
89
|
end
|
90
|
+
|
91
|
+
def test_munge
|
92
|
+
assert_equal "us*****", EmailAddress::Local.new("User+tag").munge
|
93
|
+
end
|
94
|
+
|
31
95
|
end
|