email_address 0.1.13 → 0.1.18
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 +1 -2
- data/README.md +42 -3
- data/email_address.gemspec +1 -0
- data/lib/email_address.rb +17 -18
- data/lib/email_address/active_record_validator.rb +2 -2
- data/lib/email_address/address.rb +94 -100
- data/lib/email_address/canonical_email_address_type.rb +14 -12
- data/lib/email_address/config.rb +69 -47
- data/lib/email_address/email_address_type.rb +15 -13
- data/lib/email_address/exchanger.rb +29 -30
- data/lib/email_address/host.rb +123 -125
- data/lib/email_address/local.rb +7 -7
- data/lib/email_address/version.rb +1 -1
- data/test/email_address/test_address.rb +5 -0
- data/test/email_address/test_host.rb +29 -31
- data/test/test_aliasing.rb +54 -0
- metadata +8 -6
data/lib/email_address/local.rb
CHANGED
@@ -107,7 +107,7 @@ module EmailAddress
|
|
107
107
|
%r/^([\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+)$/i.freeze
|
108
108
|
|
109
109
|
def initialize(local, config={}, host=nil)
|
110
|
-
|
110
|
+
@config = config.is_a?(Hash) ? Config.new(config) : config
|
111
111
|
self.local = local
|
112
112
|
@host = host
|
113
113
|
@error = @error_message = nil
|
@@ -130,10 +130,10 @@ module EmailAddress
|
|
130
130
|
def parse(raw)
|
131
131
|
if raw =~ /\A\"(.*)\"\z/ # Quoted
|
132
132
|
raw = $1
|
133
|
-
raw.gsub
|
133
|
+
raw = raw.gsub(/\\(.)/, '\1') # Unescape
|
134
134
|
elsif @config[:local_fix] && @config[:local_format] != :standard
|
135
|
-
raw.gsub
|
136
|
-
raw.gsub
|
135
|
+
raw = raw.gsub(' ','')
|
136
|
+
raw = raw.gsub(',','.')
|
137
137
|
#raw.gsub!(/([^\p{L}\p{N}]{2,10})/) {|s| s[0] } # Stutter punctuation typo
|
138
138
|
end
|
139
139
|
raw, comment = self.parse_comment(raw)
|
@@ -226,7 +226,7 @@ module EmailAddress
|
|
226
226
|
def relax
|
227
227
|
form = self.mailbox
|
228
228
|
form += @config[:tag_separator] + self.tag if self.tag
|
229
|
-
form.gsub
|
229
|
+
form = form.gsub(/[ \"\(\),:<>@\[\]\\]/,'')
|
230
230
|
form
|
231
231
|
end
|
232
232
|
|
@@ -235,7 +235,7 @@ module EmailAddress
|
|
235
235
|
form = self.mailbox
|
236
236
|
form += @config[:tag_separator] + self.tag if self.tag
|
237
237
|
form += "(" + self.comment + ")" if self.comment
|
238
|
-
form.gsub
|
238
|
+
form = form.gsub(/([\\\"])/, '\\\1') # Escape \ and "
|
239
239
|
if form =~ /[ \"\(\),:<>@\[\\\]]/ # Space and "(),:;<>@[\]
|
240
240
|
form = %Q("#{form}")
|
241
241
|
end
|
@@ -388,7 +388,7 @@ module EmailAddress
|
|
388
388
|
def set_error(err, reason=nil)
|
389
389
|
@error = err
|
390
390
|
@reason= reason
|
391
|
-
@error_message =
|
391
|
+
@error_message = Config.error_message(err)
|
392
392
|
false
|
393
393
|
end
|
394
394
|
|
@@ -37,6 +37,11 @@ class TestAddress < Minitest::Test
|
|
37
37
|
assert_equal "6bdd00c53645790ad9bbcb50caa93880", EmailAddress.reference("Gmail.User+tag@gmail.com")
|
38
38
|
end
|
39
39
|
|
40
|
+
def test_google_hosted
|
41
|
+
a = EmailAddress.new("Ex.am.ple+tag@boomer.com")
|
42
|
+
assert_equal a.canonical, "ex.am.ple@boomer.com"
|
43
|
+
end
|
44
|
+
|
40
45
|
# COMPARISON & MATCHING
|
41
46
|
def test_compare
|
42
47
|
a = ("User+tag@example.com")
|
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
require_relative '../test_helper'
|
3
|
-
|
1
|
+
require_relative "../test_helper"
|
4
2
|
|
5
3
|
class TestHost < MiniTest::Test
|
6
4
|
def test_host
|
@@ -10,16 +8,16 @@ class TestHost < MiniTest::Test
|
|
10
8
|
assert_equal "example", a.registration_name
|
11
9
|
assert_equal "com", a.tld
|
12
10
|
assert_equal "ex*****", a.munge
|
13
|
-
assert_nil
|
11
|
+
assert_nil a.subdomains
|
14
12
|
end
|
15
13
|
|
16
14
|
def test_dns_enabled
|
17
15
|
a = EmailAddress::Host.new("example.com")
|
18
16
|
assert_instance_of TrueClass, a.dns_enabled?
|
19
|
-
|
20
|
-
|
17
|
+
a = EmailAddress::Host.new("example.com", host_validation: :syntax)
|
18
|
+
assert_instance_of FalseClass, a.dns_enabled?
|
19
|
+
a = EmailAddress::Host.new("example.com", dns_lookup: :off)
|
21
20
|
assert_instance_of FalseClass, a.dns_enabled?
|
22
|
-
EmailAddress::Config.configure(host_validation: old_setting)
|
23
21
|
end
|
24
22
|
|
25
23
|
def test_foreign_host
|
@@ -53,54 +51,54 @@ class TestHost < MiniTest::Test
|
|
53
51
|
|
54
52
|
def test_dmarc
|
55
53
|
d = EmailAddress::Host.new("yahoo.com").dmarc
|
56
|
-
assert_equal
|
54
|
+
assert_equal "reject", d[:p]
|
57
55
|
d = EmailAddress::Host.new("example.com").dmarc
|
58
56
|
assert_equal true, d.empty?
|
59
57
|
end
|
60
58
|
|
61
59
|
def test_ipv4
|
62
|
-
h = EmailAddress::Host.new("[127.0.0.1]", host_allow_ip:true, host_local:true)
|
60
|
+
h = EmailAddress::Host.new("[127.0.0.1]", host_allow_ip: true, host_local: true)
|
63
61
|
assert_equal "127.0.0.1", h.ip_address
|
64
62
|
assert_equal true, h.valid?
|
65
63
|
end
|
66
64
|
|
67
65
|
def test_ipv6
|
68
|
-
h = EmailAddress::Host.new("[IPv6:::1]", host_allow_ip:true, host_local:true)
|
66
|
+
h = EmailAddress::Host.new("[IPv6:::1]", host_allow_ip: true, host_local: true)
|
69
67
|
assert_equal "::1", h.ip_address
|
70
68
|
assert_equal true, h.valid?
|
71
69
|
end
|
72
70
|
|
73
71
|
def test_comment
|
74
72
|
h = EmailAddress::Host.new("(oops)gmail.com")
|
75
|
-
assert_equal
|
76
|
-
assert_equal
|
73
|
+
assert_equal "gmail.com", h.to_s
|
74
|
+
assert_equal "oops", h.comment
|
77
75
|
h = EmailAddress::Host.new("gmail.com(oops)")
|
78
|
-
assert_equal
|
79
|
-
assert_equal
|
76
|
+
assert_equal "gmail.com", h.to_s
|
77
|
+
assert_equal "oops", h.comment
|
80
78
|
end
|
81
79
|
|
82
80
|
def test_matches
|
83
81
|
h = EmailAddress::Host.new("yahoo.co.jp")
|
84
82
|
assert_equal false, h.matches?("gmail.com")
|
85
|
-
assert_equal
|
86
|
-
assert_equal
|
87
|
-
assert_equal
|
88
|
-
assert_equal
|
89
|
-
assert_equal
|
83
|
+
assert_equal "yahoo.co.jp", h.matches?("yahoo.co.jp")
|
84
|
+
assert_equal ".co.jp", h.matches?(".co.jp")
|
85
|
+
assert_equal ".jp", h.matches?(".jp")
|
86
|
+
assert_equal "yahoo.", h.matches?("yahoo.")
|
87
|
+
assert_equal "yah*.jp", h.matches?("yah*.jp")
|
90
88
|
end
|
91
89
|
|
92
90
|
def test_ipv4_matches
|
93
|
-
h = EmailAddress::Host.new("[123.123.123.8]", host_allow_ip:true)
|
91
|
+
h = EmailAddress::Host.new("[123.123.123.8]", host_allow_ip: true)
|
94
92
|
assert_equal "123.123.123.8", h.ip_address
|
95
93
|
assert_equal false, h.matches?("127.0.0.0/8")
|
96
|
-
assert_equal
|
94
|
+
assert_equal "123.123.123.0/24", h.matches?("123.123.123.0/24")
|
97
95
|
end
|
98
96
|
|
99
97
|
def test_ipv6_matches
|
100
|
-
h = EmailAddress::Host.new("[IPV6:2001:db8::1]", host_allow_ip:true)
|
98
|
+
h = EmailAddress::Host.new("[IPV6:2001:db8::1]", host_allow_ip: true)
|
101
99
|
assert_equal "2001:db8::1", h.ip_address
|
102
100
|
assert_equal false, h.matches?("2002:db8::/118")
|
103
|
-
assert_equal
|
101
|
+
assert_equal "2001:db8::/118", h.matches?("2001:db8::/118")
|
104
102
|
end
|
105
103
|
|
106
104
|
def test_regexen
|
@@ -112,18 +110,18 @@ class TestHost < MiniTest::Test
|
|
112
110
|
end
|
113
111
|
|
114
112
|
def test_hosted_service
|
115
|
-
assert EmailAddress.valid?(
|
116
|
-
assert !
|
113
|
+
assert EmailAddress.valid?("test@jiff.com", dns_lookup: :mx)
|
114
|
+
assert !EmailAddress.valid?("test@gmail.com", dns_lookup: :mx)
|
117
115
|
end
|
118
116
|
|
119
117
|
def test_yahoo_bad_tld
|
120
|
-
assert !
|
121
|
-
assert !
|
118
|
+
assert !EmailAddress.valid?("test@yahoo.badtld")
|
119
|
+
assert !EmailAddress.valid?("test@yahoo.wtf") # Registered, but MX IP = 0.0.0.0
|
122
120
|
end
|
123
121
|
|
124
122
|
def test_bad_formats
|
125
|
-
assert !
|
126
|
-
assert EmailAddress::Host.new(
|
123
|
+
assert !EmailAddress::Host.new("ya hoo.com").valid?
|
124
|
+
assert EmailAddress::Host.new("ya hoo.com", host_remove_spaces: true).valid?
|
127
125
|
end
|
128
126
|
|
129
127
|
def test_errors
|
@@ -133,7 +131,7 @@ class TestHost < MiniTest::Test
|
|
133
131
|
assert_nil EmailAddress::Host.new("ajsdfhajshdfklasjhd.wtf", host_validation: :syntax).error
|
134
132
|
assert_equal EmailAddress::Host.new("ya hoo.com", host_validation: :syntax).error, "Invalid Domain Name"
|
135
133
|
assert_equal EmailAddress::Host.new("[127.0.0.1]").error, "IP Addresses are not allowed"
|
136
|
-
assert_equal EmailAddress::Host.new("[127.0.0.666]", host_allow_ip:true).error, "This is not a valid IPv4 address"
|
137
|
-
assert_equal EmailAddress::Host.new("[IPv6::12t]", host_allow_ip:true).error, "This is not a valid IPv6 address"
|
134
|
+
assert_equal EmailAddress::Host.new("[127.0.0.666]", host_allow_ip: true).error, "This is not a valid IPv4 address"
|
135
|
+
assert_equal EmailAddress::Host.new("[IPv6::12t]", host_allow_ip: true).error, "This is not a valid IPv6 address"
|
138
136
|
end
|
139
137
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require_relative 'test_helper'
|
3
|
+
|
4
|
+
class TestAliasing < MiniTest::Test
|
5
|
+
def setup
|
6
|
+
Object.send(:const_set, :EmailAddressValidator, EmailAddress)
|
7
|
+
Object.send(:remove_const, :EmailAddress)
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_email_address_not_defined
|
11
|
+
assert_nil defined?(EmailAddress)
|
12
|
+
assert_nil defined?(EmailAddress::Address)
|
13
|
+
assert_nil defined?(EmailAddress::Config)
|
14
|
+
assert_nil defined?(EmailAddress::Exchanger)
|
15
|
+
assert_nil defined?(EmailAddress::Host)
|
16
|
+
assert_nil defined?(EmailAddress::Local)
|
17
|
+
assert_nil defined?(EmailAddress::Rewriter)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_alias_defined
|
21
|
+
assert_equal defined?(EmailAddressValidator), "constant"
|
22
|
+
assert_equal defined?(EmailAddressValidator::Address), "constant"
|
23
|
+
assert_equal defined?(EmailAddressValidator::Config), "constant"
|
24
|
+
assert_equal defined?(EmailAddressValidator::Exchanger), "constant"
|
25
|
+
assert_equal defined?(EmailAddressValidator::Host), "constant"
|
26
|
+
assert_equal defined?(EmailAddressValidator::Local), "constant"
|
27
|
+
assert_equal defined?(EmailAddressValidator::Rewriter), "constant"
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_alias_class_methods
|
31
|
+
assert_equal true, EmailAddressValidator.valid?("user@yahoo.com")
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_alias_host_methods
|
35
|
+
assert_equal true, EmailAddressValidator::Host.new("yahoo.com").valid?
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_alias_address_methods
|
39
|
+
assert_equal true, EmailAddressValidator::Address.new("user@yahoo.com").valid?
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_alias_config_methods
|
43
|
+
assert Hash, EmailAddressValidator::Config.new.to_h
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_alias_local_methods
|
47
|
+
assert_equal true, EmailAddressValidator::Local.new("user").valid?
|
48
|
+
end
|
49
|
+
|
50
|
+
def teardown
|
51
|
+
Object.send(:const_set, :EmailAddress, EmailAddressValidator)
|
52
|
+
Object.send(:remove_const, :EmailAddressValidator)
|
53
|
+
end
|
54
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: email_address
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Allen Fair
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-06-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -162,13 +162,14 @@ files:
|
|
162
162
|
- test/email_address/test_host.rb
|
163
163
|
- test/email_address/test_local.rb
|
164
164
|
- test/email_address/test_rewriter.rb
|
165
|
+
- test/test_aliasing.rb
|
165
166
|
- test/test_email_address.rb
|
166
167
|
- test/test_helper.rb
|
167
168
|
homepage: https://github.com/afair/email_address
|
168
169
|
licenses:
|
169
170
|
- MIT
|
170
171
|
metadata: {}
|
171
|
-
post_install_message:
|
172
|
+
post_install_message:
|
172
173
|
rdoc_options: []
|
173
174
|
require_paths:
|
174
175
|
- lib
|
@@ -183,8 +184,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
183
184
|
- !ruby/object:Gem::Version
|
184
185
|
version: '0'
|
185
186
|
requirements: []
|
186
|
-
rubygems_version: 3.
|
187
|
-
signing_key:
|
187
|
+
rubygems_version: 3.0.6
|
188
|
+
signing_key:
|
188
189
|
specification_version: 4
|
189
190
|
summary: This gem provides a ruby language library for working with and validating
|
190
191
|
email addresses. By default, it validates against conventional usage, the format
|
@@ -199,5 +200,6 @@ test_files:
|
|
199
200
|
- test/email_address/test_host.rb
|
200
201
|
- test/email_address/test_local.rb
|
201
202
|
- test/email_address/test_rewriter.rb
|
203
|
+
- test/test_aliasing.rb
|
202
204
|
- test/test_email_address.rb
|
203
205
|
- test/test_helper.rb
|