email_address 0.1.16 → 0.2.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/.github/workflows/ci.yml +18 -0
- data/Gemfile +1 -1
- data/README.md +65 -6
- data/Rakefile +2 -2
- data/email_address.gemspec +22 -23
- data/lib/email_address.rb +17 -19
- data/lib/email_address/active_record_validator.rb +8 -11
- data/lib/email_address/address.rb +37 -31
- data/lib/email_address/canonical_email_address_type.rb +14 -12
- data/lib/email_address/config.rb +14 -2
- data/lib/email_address/email_address_type.rb +15 -13
- data/lib/email_address/exchanger.rb +8 -22
- data/lib/email_address/host.rb +29 -48
- data/lib/email_address/local.rb +103 -106
- data/lib/email_address/rewriter.rb +28 -31
- data/lib/email_address/version.rb +1 -1
- data/test/activerecord/test_ar.rb +17 -13
- data/test/activerecord/user.rb +31 -30
- data/test/email_address/test_address.rb +49 -25
- data/test/email_address/test_config.rb +8 -8
- data/test/email_address/test_exchanger.rb +6 -7
- data/test/email_address/test_local.rb +35 -35
- data/test/email_address/test_rewriter.rb +2 -5
- data/test/test_aliasing.rb +53 -0
- data/test/test_email_address.rb +14 -18
- data/test/test_helper.rb +9 -8
- metadata +34 -21
- data/.travis.yml +0 -9
@@ -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,7 @@ 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
108
|
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
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require_relative "test_helper"
|
2
|
+
|
3
|
+
class TestAliasing < MiniTest::Test
|
4
|
+
def setup
|
5
|
+
Object.send(:const_set, :EmailAddressValidator, EmailAddress)
|
6
|
+
Object.send(:remove_const, :EmailAddress)
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_email_address_not_defined
|
10
|
+
assert_nil defined?(EmailAddress)
|
11
|
+
assert_nil defined?(EmailAddress::Address)
|
12
|
+
assert_nil defined?(EmailAddress::Config)
|
13
|
+
assert_nil defined?(EmailAddress::Exchanger)
|
14
|
+
assert_nil defined?(EmailAddress::Host)
|
15
|
+
assert_nil defined?(EmailAddress::Local)
|
16
|
+
assert_nil defined?(EmailAddress::Rewriter)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_alias_defined
|
20
|
+
assert_equal defined?(EmailAddressValidator), "constant"
|
21
|
+
assert_equal defined?(EmailAddressValidator::Address), "constant"
|
22
|
+
assert_equal defined?(EmailAddressValidator::Config), "constant"
|
23
|
+
assert_equal defined?(EmailAddressValidator::Exchanger), "constant"
|
24
|
+
assert_equal defined?(EmailAddressValidator::Host), "constant"
|
25
|
+
assert_equal defined?(EmailAddressValidator::Local), "constant"
|
26
|
+
assert_equal defined?(EmailAddressValidator::Rewriter), "constant"
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_alias_class_methods
|
30
|
+
assert_equal true, EmailAddressValidator.valid?("user@yahoo.com")
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_alias_host_methods
|
34
|
+
assert_equal true, EmailAddressValidator::Host.new("yahoo.com").valid?
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_alias_address_methods
|
38
|
+
assert_equal true, EmailAddressValidator::Address.new("user@yahoo.com").valid?
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_alias_config_methods
|
42
|
+
assert Hash, EmailAddressValidator::Config.new.to_h
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_alias_local_methods
|
46
|
+
assert_equal true, EmailAddressValidator::Local.new("user").valid?
|
47
|
+
end
|
48
|
+
|
49
|
+
def teardown
|
50
|
+
Object.send(:const_set, :EmailAddress, EmailAddressValidator)
|
51
|
+
Object.send(:remove_const, :EmailAddressValidator)
|
52
|
+
end
|
53
|
+
end
|
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"
|
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.
|
4
|
+
version: 0.2.0
|
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:
|
11
|
+
date: 2021-07-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 6.1.4
|
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
|
-
version:
|
68
|
+
version: 6.1.4
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: sqlite3
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,13 +95,13 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: pry
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
|
-
type: :
|
104
|
+
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
@@ -109,25 +109,33 @@ dependencies:
|
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: standard
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- - "
|
115
|
+
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
118
|
-
|
117
|
+
version: 1.1.1
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
119
123
|
- !ruby/object:Gem::Version
|
120
|
-
version:
|
124
|
+
version: 1.1.1
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: simpleidn
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
121
132
|
type: :runtime
|
122
133
|
prerelease: false
|
123
134
|
version_requirements: !ruby/object:Gem::Requirement
|
124
135
|
requirements:
|
125
136
|
- - ">="
|
126
137
|
- !ruby/object:Gem::Version
|
127
|
-
version:
|
128
|
-
- - "<"
|
129
|
-
- !ruby/object:Gem::Version
|
130
|
-
version: '3'
|
138
|
+
version: '0'
|
131
139
|
description: The EmailAddress Gem to work with and validate email addresses.
|
132
140
|
email:
|
133
141
|
- allen.fair@gmail.com
|
@@ -135,8 +143,8 @@ executables: []
|
|
135
143
|
extensions: []
|
136
144
|
extra_rdoc_files: []
|
137
145
|
files:
|
146
|
+
- ".github/workflows/ci.yml"
|
138
147
|
- ".gitignore"
|
139
|
-
- ".travis.yml"
|
140
148
|
- Gemfile
|
141
149
|
- LICENSE.txt
|
142
150
|
- README.md
|
@@ -162,13 +170,14 @@ files:
|
|
162
170
|
- test/email_address/test_host.rb
|
163
171
|
- test/email_address/test_local.rb
|
164
172
|
- test/email_address/test_rewriter.rb
|
173
|
+
- test/test_aliasing.rb
|
165
174
|
- test/test_email_address.rb
|
166
175
|
- test/test_helper.rb
|
167
176
|
homepage: https://github.com/afair/email_address
|
168
177
|
licenses:
|
169
178
|
- MIT
|
170
179
|
metadata: {}
|
171
|
-
post_install_message:
|
180
|
+
post_install_message:
|
172
181
|
rdoc_options: []
|
173
182
|
require_paths:
|
174
183
|
- lib
|
@@ -176,15 +185,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
176
185
|
requirements:
|
177
186
|
- - ">="
|
178
187
|
- !ruby/object:Gem::Version
|
179
|
-
version: '
|
188
|
+
version: '2.5'
|
189
|
+
- - "<"
|
190
|
+
- !ruby/object:Gem::Version
|
191
|
+
version: '4'
|
180
192
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
181
193
|
requirements:
|
182
194
|
- - ">="
|
183
195
|
- !ruby/object:Gem::Version
|
184
196
|
version: '0'
|
185
197
|
requirements: []
|
186
|
-
rubygems_version: 3.
|
187
|
-
signing_key:
|
198
|
+
rubygems_version: 3.2.15
|
199
|
+
signing_key:
|
188
200
|
specification_version: 4
|
189
201
|
summary: This gem provides a ruby language library for working with and validating
|
190
202
|
email addresses. By default, it validates against conventional usage, the format
|
@@ -199,5 +211,6 @@ test_files:
|
|
199
211
|
- test/email_address/test_host.rb
|
200
212
|
- test/email_address/test_local.rb
|
201
213
|
- test/email_address/test_rewriter.rb
|
214
|
+
- test/test_aliasing.rb
|
202
215
|
- test/test_email_address.rb
|
203
216
|
- test/test_helper.rb
|