email_address 0.2.4 → 0.2.5
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 +2 -2
- data/.gitignore +1 -0
- data/README.md +1 -1
- data/email_address.gemspec +9 -6
- data/lib/email_address/active_record_validator.rb +6 -1
- data/lib/email_address/host.rb +3 -3
- data/lib/email_address/local.rb +1 -1
- data/lib/email_address/version.rb +1 -1
- data/test/activerecord/test_ar.rb +10 -0
- data/test/activerecord/user.rb +3 -0
- data/test/email_address/test_host.rb +9 -2
- data/test/email_address/test_local.rb +1 -1
- metadata +70 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5a0acf217d99455d8e47f25dc21b4ff25478234932c8618f3d5fe0fe4629e433
|
4
|
+
data.tar.gz: 5da4449168ec63611c8e510efd010b12995502b3162c67d3222c46cbabbbe6e8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1703377fdf988adabaaf4d728db211320a1f33cf0daeeabd68448cf4a4d02b8647fcb9aad636d0aa14250386b8c8d2ede3cb89b42b55ffa2af793b1f788a9a08
|
7
|
+
data.tar.gz: 15d5b84368e692e6ce08db5ad596ec1ef684f87c70a8db4d1a2d69ab977c72ed5b5f80d9945fc6cdf42af3af5581a9f3a55b26c9138370ce228ad663c758f387
|
data/.github/workflows/ci.yml
CHANGED
@@ -5,9 +5,9 @@ jobs:
|
|
5
5
|
runs-on: ubuntu-latest
|
6
6
|
strategy:
|
7
7
|
matrix:
|
8
|
-
ruby-version: [
|
8
|
+
ruby-version: [3.2, 3.3, 3.4]
|
9
9
|
steps:
|
10
|
-
- uses: actions/checkout@
|
10
|
+
- uses: actions/checkout@v3
|
11
11
|
- uses: ruby/setup-ruby@v1
|
12
12
|
with:
|
13
13
|
ruby-version: ${{ matrix.ruby-version }}
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -241,7 +241,7 @@ email.provider #=> :google
|
|
241
241
|
email.mailbox #=> "clark.kent"
|
242
242
|
email.tag #=> "scoops"
|
243
243
|
|
244
|
-
email.host.
|
244
|
+
email.host.exchangers.first[:ip] #=> "2a00:1450:400b:c02::1a"
|
245
245
|
email.host.txt_hash #=> {:v=>"spf1", :redirect=>"\_spf.google.com"}
|
246
246
|
|
247
247
|
EmailAddress.normal("HIRO@こんにちは世界.com")
|
data/email_address.gemspec
CHANGED
@@ -15,23 +15,26 @@ Gem::Specification.new do |spec|
|
|
15
15
|
spec.required_ruby_version = ">= 2.5", "< 4"
|
16
16
|
spec.files = `git ls-files`.split($/)
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
18
|
spec.require_paths = ["lib"]
|
20
19
|
|
21
20
|
spec.add_development_dependency "rake"
|
22
21
|
spec.add_development_dependency "minitest", "~> 5.11"
|
23
22
|
spec.add_development_dependency "bundler" # , "~> 1.16.0"
|
24
23
|
if RUBY_PLATFORM == "java"
|
25
|
-
spec.add_development_dependency "activerecord", "~>
|
26
|
-
spec.add_development_dependency "activerecord-jdbcsqlite3-adapter", "~>
|
24
|
+
spec.add_development_dependency "activerecord", "~> 7.2.0"
|
25
|
+
spec.add_development_dependency "activerecord-jdbcsqlite3-adapter", "~> 70.2"
|
27
26
|
else
|
28
|
-
spec.add_development_dependency "activerecord", "~>
|
29
|
-
spec.add_development_dependency "sqlite3"
|
30
|
-
spec.add_development_dependency "standard"
|
27
|
+
spec.add_development_dependency "activerecord", "~> 8.0.0"
|
28
|
+
spec.add_development_dependency "sqlite3", "~> 2.1"
|
29
|
+
spec.add_development_dependency "standard"
|
31
30
|
end
|
32
31
|
spec.add_development_dependency "net-smtp"
|
33
32
|
spec.add_development_dependency "simplecov"
|
34
33
|
spec.add_development_dependency "pry"
|
34
|
+
spec.add_development_dependency "bigdecimal"
|
35
|
+
spec.add_development_dependency "mutex_m"
|
36
|
+
spec.add_development_dependency "irb"
|
35
37
|
|
38
|
+
spec.add_dependency "base64"
|
36
39
|
spec.add_dependency "simpleidn"
|
37
40
|
end
|
@@ -12,8 +12,12 @@ module EmailAddress
|
|
12
12
|
# * field: email,
|
13
13
|
# * fields: [:email1, :email2]
|
14
14
|
#
|
15
|
+
# * code: custom error code (default: :invalid_address)
|
16
|
+
# * message: custom error message (default: "Invalid Email Address")
|
17
|
+
#
|
15
18
|
# Default field: :email or :email_address (first found)
|
16
19
|
#
|
20
|
+
#
|
17
21
|
class ActiveRecordValidator < ActiveModel::Validator
|
18
22
|
def initialize(options = {})
|
19
23
|
@opt = options
|
@@ -35,10 +39,11 @@ module EmailAddress
|
|
35
39
|
return if r[f].nil?
|
36
40
|
e = Address.new(r[f])
|
37
41
|
unless e.valid?
|
42
|
+
error_code = @opt[:code] || :invalid_address
|
38
43
|
error_message = @opt[:message] ||
|
39
44
|
Config.error_message(:invalid_address, I18n.locale.to_s) ||
|
40
45
|
"Invalid Email Address"
|
41
|
-
r.errors.add(f, error_message)
|
46
|
+
r.errors.add(f, error_code, message: error_message)
|
42
47
|
end
|
43
48
|
end
|
44
49
|
end
|
data/lib/email_address/host.rb
CHANGED
@@ -381,7 +381,7 @@ module EmailAddress
|
|
381
381
|
# Returns true if the host name is valid according to the current configuration
|
382
382
|
def valid?(rules = {})
|
383
383
|
host_validation = rules[:host_validation] || @config[:host_validation] || :mx
|
384
|
-
dns_lookup = rules[:dns_lookup] || host_validation
|
384
|
+
dns_lookup = rules[:dns_lookup] || @config[:dns_lookup] || host_validation
|
385
385
|
self.error_message = nil
|
386
386
|
if host_name && !host_name.empty? && !@config[:host_size].include?(host_name.size)
|
387
387
|
return set_error(:invalid_host)
|
@@ -392,10 +392,10 @@ module EmailAddress
|
|
392
392
|
false
|
393
393
|
elsif dns_lookup == :connect
|
394
394
|
valid_mx? && connect
|
395
|
+
elsif dns_lookup == :a || host_validation == :a
|
396
|
+
valid_dns?
|
395
397
|
elsif dns_lookup == :mx
|
396
398
|
valid_mx?
|
397
|
-
elsif dns_lookup == :a
|
398
|
-
valid_dns?
|
399
399
|
else
|
400
400
|
true
|
401
401
|
end
|
data/lib/email_address/local.rb
CHANGED
@@ -116,7 +116,7 @@ module EmailAddress
|
|
116
116
|
|
117
117
|
def local=(raw)
|
118
118
|
self.original = raw
|
119
|
-
raw.downcase
|
119
|
+
raw = raw.downcase if @config[:local_downcase].nil? || @config[:local_downcase]
|
120
120
|
@local = raw
|
121
121
|
|
122
122
|
if @config[:local_parse].is_a?(Proc)
|
@@ -9,11 +9,21 @@ class TestAR < MiniTest::Test
|
|
9
9
|
user = User.new(email: "Pat.Jones+ASDF#GMAIL.com")
|
10
10
|
assert_equal false, user.valid?
|
11
11
|
assert user.errors.messages[:email].first
|
12
|
+
|
12
13
|
user = User.new(email: "Pat.Jones+ASDF@GMAIL.com")
|
13
14
|
assert_equal true, user.valid?
|
14
15
|
end
|
15
16
|
end
|
16
17
|
|
18
|
+
def test_validation_error_message
|
19
|
+
if RUBY_PLATFORM != "java" # jruby
|
20
|
+
user = User.new(alternate_email: "Pat.Jones+ASDF#GMAIL.com")
|
21
|
+
assert_equal false, user.valid?
|
22
|
+
assert user.errors.messages[:alternate_email].first.include?("Check your email")
|
23
|
+
assert_equal :some_error_code, user.errors.details[:alternate_email].first[:error]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
17
27
|
def test_datatype
|
18
28
|
# Disabled JRuby checks... weird CI failures. Hopefully someone can help?
|
19
29
|
if RUBY_PLATFORM != "java" # jruby
|
data/test/activerecord/user.rb
CHANGED
@@ -48,10 +48,13 @@ class User < ApplicationRecord
|
|
48
48
|
if defined?(ActiveRecord) && ::ActiveRecord::VERSION::MAJOR >= 5
|
49
49
|
attribute :email, :email_address
|
50
50
|
attribute :canonical_email, :canonical_email_address
|
51
|
+
attribute :alternate_email, :email_address
|
51
52
|
end
|
52
53
|
|
53
54
|
validates_with EmailAddress::ActiveRecordValidator,
|
54
55
|
fields: %i[email canonical_email]
|
56
|
+
validates_with EmailAddress::ActiveRecordValidator,
|
57
|
+
field: :alternate_email, code: :some_error_code, message: "Check your email"
|
55
58
|
|
56
59
|
def email=(email_address)
|
57
60
|
self[:canonical_email] = email_address
|
@@ -52,7 +52,7 @@ class TestHost < MiniTest::Test
|
|
52
52
|
def test_dmarc
|
53
53
|
d = EmailAddress::Host.new("yahoo.com").dmarc
|
54
54
|
assert_equal "reject", d[:p]
|
55
|
-
d = EmailAddress::Host.new("
|
55
|
+
d = EmailAddress::Host.new("calculator.net").dmarc
|
56
56
|
assert_equal true, d.empty?
|
57
57
|
end
|
58
58
|
|
@@ -127,7 +127,7 @@ class TestHost < MiniTest::Test
|
|
127
127
|
def test_hosted_service
|
128
128
|
# Is there a gmail-hosted domain that will continue to exist? Removing until then
|
129
129
|
# assert EmailAddress.valid?("test@jiff.com", dns_lookup: :mx)
|
130
|
-
assert !EmailAddress.valid?("
|
130
|
+
assert !EmailAddress.valid?("t@gmail.com", dns_lookup: :mx)
|
131
131
|
end
|
132
132
|
|
133
133
|
def test_yahoo_bad_tld
|
@@ -154,4 +154,11 @@ class TestHost < MiniTest::Test
|
|
154
154
|
def test_host_size
|
155
155
|
assert !EmailAddress::Host.new("stackoverflow.com", {host_size: 1..3}).valid?
|
156
156
|
end
|
157
|
+
|
158
|
+
# When a domain is not configured to receive email (missing MX record),
|
159
|
+
# Though some MTA's will fallback to the A/AAAA host record
|
160
|
+
def test_no_mx
|
161
|
+
assert !EmailAddress::Host.new("zaboz.com").valid?
|
162
|
+
assert EmailAddress::Host.new("zaboz.com", dns_lookup: :a).valid?
|
163
|
+
end
|
157
164
|
end
|
@@ -92,7 +92,7 @@ class TestLocal < MiniTest::Test
|
|
92
92
|
|
93
93
|
def test_hosted
|
94
94
|
assert EmailAddress.valid?("x@exposure.co")
|
95
|
-
assert EmailAddress.error("
|
95
|
+
assert EmailAddress.error("xx+subscriber@gmail.com")
|
96
96
|
assert EmailAddress.valid?("xxxxx+subscriber@gmail.com")
|
97
97
|
end
|
98
98
|
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: email_address
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Allen Fair
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-01-09 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: rake
|
@@ -58,42 +57,42 @@ dependencies:
|
|
58
57
|
requirements:
|
59
58
|
- - "~>"
|
60
59
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
60
|
+
version: 8.0.0
|
62
61
|
type: :development
|
63
62
|
prerelease: false
|
64
63
|
version_requirements: !ruby/object:Gem::Requirement
|
65
64
|
requirements:
|
66
65
|
- - "~>"
|
67
66
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
67
|
+
version: 8.0.0
|
69
68
|
- !ruby/object:Gem::Dependency
|
70
69
|
name: sqlite3
|
71
70
|
requirement: !ruby/object:Gem::Requirement
|
72
71
|
requirements:
|
73
|
-
- - "
|
72
|
+
- - "~>"
|
74
73
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
74
|
+
version: '2.1'
|
76
75
|
type: :development
|
77
76
|
prerelease: false
|
78
77
|
version_requirements: !ruby/object:Gem::Requirement
|
79
78
|
requirements:
|
80
|
-
- - "
|
79
|
+
- - "~>"
|
81
80
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
81
|
+
version: '2.1'
|
83
82
|
- !ruby/object:Gem::Dependency
|
84
83
|
name: standard
|
85
84
|
requirement: !ruby/object:Gem::Requirement
|
86
85
|
requirements:
|
87
|
-
- - "
|
86
|
+
- - ">="
|
88
87
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
88
|
+
version: '0'
|
90
89
|
type: :development
|
91
90
|
prerelease: false
|
92
91
|
version_requirements: !ruby/object:Gem::Requirement
|
93
92
|
requirements:
|
94
|
-
- - "
|
93
|
+
- - ">="
|
95
94
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
95
|
+
version: '0'
|
97
96
|
- !ruby/object:Gem::Dependency
|
98
97
|
name: net-smtp
|
99
98
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,6 +135,62 @@ dependencies:
|
|
136
135
|
- - ">="
|
137
136
|
- !ruby/object:Gem::Version
|
138
137
|
version: '0'
|
138
|
+
- !ruby/object:Gem::Dependency
|
139
|
+
name: bigdecimal
|
140
|
+
requirement: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
145
|
+
type: :development
|
146
|
+
prerelease: false
|
147
|
+
version_requirements: !ruby/object:Gem::Requirement
|
148
|
+
requirements:
|
149
|
+
- - ">="
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: '0'
|
152
|
+
- !ruby/object:Gem::Dependency
|
153
|
+
name: mutex_m
|
154
|
+
requirement: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - ">="
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0'
|
159
|
+
type: :development
|
160
|
+
prerelease: false
|
161
|
+
version_requirements: !ruby/object:Gem::Requirement
|
162
|
+
requirements:
|
163
|
+
- - ">="
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
166
|
+
- !ruby/object:Gem::Dependency
|
167
|
+
name: irb
|
168
|
+
requirement: !ruby/object:Gem::Requirement
|
169
|
+
requirements:
|
170
|
+
- - ">="
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: '0'
|
173
|
+
type: :development
|
174
|
+
prerelease: false
|
175
|
+
version_requirements: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - ">="
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: '0'
|
180
|
+
- !ruby/object:Gem::Dependency
|
181
|
+
name: base64
|
182
|
+
requirement: !ruby/object:Gem::Requirement
|
183
|
+
requirements:
|
184
|
+
- - ">="
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '0'
|
187
|
+
type: :runtime
|
188
|
+
prerelease: false
|
189
|
+
version_requirements: !ruby/object:Gem::Requirement
|
190
|
+
requirements:
|
191
|
+
- - ">="
|
192
|
+
- !ruby/object:Gem::Version
|
193
|
+
version: '0'
|
139
194
|
- !ruby/object:Gem::Dependency
|
140
195
|
name: simpleidn
|
141
196
|
requirement: !ruby/object:Gem::Requirement
|
@@ -191,7 +246,6 @@ homepage: https://github.com/afair/email_address
|
|
191
246
|
licenses:
|
192
247
|
- MIT
|
193
248
|
metadata: {}
|
194
|
-
post_install_message:
|
195
249
|
rdoc_options: []
|
196
250
|
require_paths:
|
197
251
|
- lib
|
@@ -209,22 +263,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
209
263
|
- !ruby/object:Gem::Version
|
210
264
|
version: '0'
|
211
265
|
requirements: []
|
212
|
-
rubygems_version: 3.
|
213
|
-
signing_key:
|
266
|
+
rubygems_version: 3.6.2
|
214
267
|
specification_version: 4
|
215
268
|
summary: This gem provides a ruby language library for working with and validating
|
216
269
|
email addresses. By default, it validates against conventional usage, the format
|
217
270
|
preferred for user email addresses. It can be configured to validate against RFC
|
218
271
|
“Standard” formats, common email service provider formats, and perform DNS validation.
|
219
|
-
test_files:
|
220
|
-
- test/activerecord/test_ar.rb
|
221
|
-
- test/activerecord/user.rb
|
222
|
-
- test/email_address/test_address.rb
|
223
|
-
- test/email_address/test_config.rb
|
224
|
-
- test/email_address/test_exchanger.rb
|
225
|
-
- test/email_address/test_host.rb
|
226
|
-
- test/email_address/test_local.rb
|
227
|
-
- test/email_address/test_rewriter.rb
|
228
|
-
- test/test_aliasing.rb
|
229
|
-
- test/test_email_address.rb
|
230
|
-
- test/test_helper.rb
|
272
|
+
test_files: []
|