valid_email2 7.0.0 → 7.0.11
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.yaml +5 -2
- data/.github/workflows/release.yaml +2 -0
- data/.release-please-manifest.json +1 -1
- data/.rubocop.yml +17 -0
- data/.rubocop_todo.yml +263 -0
- data/CHANGELOG.md +78 -0
- data/README.md +11 -0
- data/config/disposable_email_domains.txt +5133 -5677
- data/gemfiles/activemodel8.gemfile +5 -0
- data/lib/valid_email2/address.rb +26 -63
- data/lib/valid_email2/dns.rb +71 -0
- data/lib/valid_email2/email_validator.rb +3 -1
- data/lib/valid_email2/version.rb +1 -1
- data/pull_mailchecker_emails.rb +13 -3
- data/spec/address_spec.rb +128 -42
- data/spec/benchmark_spec.rb +13 -2
- data/spec/dns_spec.rb +21 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/valid_email2_spec.rb +3 -0
- data/valid_email2.gemspec +6 -5
- metadata +38 -8
- data/lib/valid_email2/dns_records_cache.rb +0 -37
data/valid_email2.gemspec
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
3
|
require "valid_email2/version"
|
5
4
|
|
@@ -8,8 +7,8 @@ Gem::Specification.new do |spec|
|
|
8
7
|
spec.version = ValidEmail2::VERSION
|
9
8
|
spec.authors = ["Micke Lisinge"]
|
10
9
|
spec.email = ["hi@micke.me"]
|
11
|
-
spec.description =
|
12
|
-
spec.summary =
|
10
|
+
spec.description = 'ActiveModel validation for email. Including MX lookup and disposable email deny list'
|
11
|
+
spec.summary = 'ActiveModel validation for email. Including MX lookup and disposable email deny list'
|
13
12
|
spec.homepage = "https://github.com/micke/valid_email2"
|
14
13
|
spec.license = "MIT"
|
15
14
|
|
@@ -22,10 +21,12 @@ Gem::Specification.new do |spec|
|
|
22
21
|
|
23
22
|
spec.add_development_dependency "bundler", "~> 2.0"
|
24
23
|
spec.add_development_dependency "rake", "~> 12.3"
|
24
|
+
spec.add_development_dependency "securerandom", "0.3.1" # https://github.com/micke/valid_email2/actions/runs/13325070756/job/37216488894
|
25
25
|
spec.add_development_dependency "rspec", "~> 3.5"
|
26
26
|
spec.add_development_dependency "rspec-benchmark", "~> 0.6"
|
27
27
|
spec.add_development_dependency "net-smtp"
|
28
|
-
spec.add_development_dependency "
|
28
|
+
spec.add_development_dependency "debug"
|
29
|
+
spec.add_development_dependency "rubocop"
|
29
30
|
spec.add_runtime_dependency "mail", "~> 2.5"
|
30
31
|
spec.add_runtime_dependency "activemodel", ">= 6.0"
|
31
32
|
end
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: valid_email2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.0.
|
4
|
+
version: 7.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Micke Lisinge
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-02-28 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: bundler
|
@@ -38,6 +37,20 @@ dependencies:
|
|
38
37
|
- - "~>"
|
39
38
|
- !ruby/object:Gem::Version
|
40
39
|
version: '12.3'
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: securerandom
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - '='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 0.3.1
|
47
|
+
type: :development
|
48
|
+
prerelease: false
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - '='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.3.1
|
41
54
|
- !ruby/object:Gem::Dependency
|
42
55
|
name: rspec
|
43
56
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,7 +94,21 @@ dependencies:
|
|
81
94
|
- !ruby/object:Gem::Version
|
82
95
|
version: '0'
|
83
96
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
97
|
+
name: debug
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
type: :development
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: rubocop
|
85
112
|
requirement: !ruby/object:Gem::Requirement
|
86
113
|
requirements:
|
87
114
|
- - ">="
|
@@ -134,6 +161,8 @@ files:
|
|
134
161
|
- ".github/workflows/release.yaml"
|
135
162
|
- ".gitignore"
|
136
163
|
- ".release-please-manifest.json"
|
164
|
+
- ".rubocop.yml"
|
165
|
+
- ".rubocop_todo.yml"
|
137
166
|
- ".ruby-version"
|
138
167
|
- CHANGELOG.md
|
139
168
|
- Gemfile
|
@@ -144,15 +173,17 @@ files:
|
|
144
173
|
- config/disposable_email_domains.txt
|
145
174
|
- gemfiles/activemodel6.gemfile
|
146
175
|
- gemfiles/activemodel7.gemfile
|
176
|
+
- gemfiles/activemodel8.gemfile
|
147
177
|
- lib/valid_email2.rb
|
148
178
|
- lib/valid_email2/address.rb
|
149
|
-
- lib/valid_email2/
|
179
|
+
- lib/valid_email2/dns.rb
|
150
180
|
- lib/valid_email2/email_validator.rb
|
151
181
|
- lib/valid_email2/version.rb
|
152
182
|
- pull_mailchecker_emails.rb
|
153
183
|
- release-please-config.json
|
154
184
|
- spec/address_spec.rb
|
155
185
|
- spec/benchmark_spec.rb
|
186
|
+
- spec/dns_spec.rb
|
156
187
|
- spec/spec_helper.rb
|
157
188
|
- spec/valid_email2_spec.rb
|
158
189
|
- valid_email2.gemspec
|
@@ -160,7 +191,6 @@ homepage: https://github.com/micke/valid_email2
|
|
160
191
|
licenses:
|
161
192
|
- MIT
|
162
193
|
metadata: {}
|
163
|
-
post_install_message:
|
164
194
|
rdoc_options: []
|
165
195
|
require_paths:
|
166
196
|
- lib
|
@@ -175,13 +205,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
175
205
|
- !ruby/object:Gem::Version
|
176
206
|
version: '0'
|
177
207
|
requirements: []
|
178
|
-
rubygems_version: 3.5
|
179
|
-
signing_key:
|
208
|
+
rubygems_version: 3.6.5
|
180
209
|
specification_version: 4
|
181
210
|
summary: ActiveModel validation for email. Including MX lookup and disposable email
|
182
211
|
deny list
|
183
212
|
test_files:
|
184
213
|
- spec/address_spec.rb
|
185
214
|
- spec/benchmark_spec.rb
|
215
|
+
- spec/dns_spec.rb
|
186
216
|
- spec/spec_helper.rb
|
187
217
|
- spec/valid_email2_spec.rb
|
@@ -1,37 +0,0 @@
|
|
1
|
-
module ValidEmail2
|
2
|
-
class DnsRecordsCache
|
3
|
-
MAX_CACHE_SIZE = 1_000
|
4
|
-
|
5
|
-
def initialize
|
6
|
-
# Cache structure: { domain (String): { records: [], cached_at: Time, ttl: Integer } }
|
7
|
-
@cache = {}
|
8
|
-
end
|
9
|
-
|
10
|
-
def fetch(domain, &block)
|
11
|
-
prune_cache if @cache.size > MAX_CACHE_SIZE
|
12
|
-
|
13
|
-
cache_entry = @cache[domain]
|
14
|
-
|
15
|
-
if cache_entry && (Time.now - cache_entry[:cached_at]) < cache_entry[:ttl]
|
16
|
-
return cache_entry[:records]
|
17
|
-
else
|
18
|
-
@cache.delete(domain)
|
19
|
-
end
|
20
|
-
|
21
|
-
records = block.call
|
22
|
-
|
23
|
-
if records.any?
|
24
|
-
ttl = records.map(&:ttl).min
|
25
|
-
@cache[domain] = { records: records, cached_at: Time.now, ttl: ttl }
|
26
|
-
end
|
27
|
-
|
28
|
-
records
|
29
|
-
end
|
30
|
-
|
31
|
-
def prune_cache
|
32
|
-
entries_sorted_by_cached_at_asc = (@cache.sort_by { |_domain, data| data[:cached_at] }).flatten
|
33
|
-
entries_to_remove = entries_sorted_by_cached_at_asc.first(@cache.size - MAX_CACHE_SIZE)
|
34
|
-
entries_to_remove.each { |domain| @cache.delete(domain) }
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|