truemail 2.2.1 → 2.3.2

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.
@@ -13,20 +13,24 @@ module Truemail
13
13
 
14
14
  attr_reader :configuration, :host, :email, :response
15
15
 
16
- def initialize(configuration:, host:, email:, attempts: nil)
16
+ def initialize(configuration:, host:, email:, attempts: nil, port_open_status: proc { true })
17
17
  @configuration = Truemail::Validate::Smtp::Request::Configuration.new(configuration)
18
18
  @response = Truemail::Validate::Smtp::Response.new
19
19
  @host = host
20
20
  @email = email
21
21
  @attempts = attempts
22
+ @port_open_status = port_open_status
22
23
  end
23
24
 
24
25
  def check_port
25
- Timeout.timeout(configuration.connection_timeout) do
26
- return response.port_opened = !TCPSocket.new(host, Truemail::Validate::Smtp::Request::SMTP_PORT).close
27
- end
26
+ response.port_opened = ::Socket.tcp(
27
+ host,
28
+ Truemail::Validate::Smtp::Request::SMTP_PORT,
29
+ connect_timeout: configuration.connection_timeout,
30
+ &port_open_status
31
+ )
28
32
  rescue => error
29
- retry if attempts_exist? && error.is_a?(Timeout::Error)
33
+ retry if attempts_exist? && error.is_a?(::Errno::ETIMEDOUT)
30
34
  response.port_opened = false
31
35
  end
32
36
 
@@ -53,7 +57,7 @@ module Truemail
53
57
  end
54
58
  end
55
59
 
56
- attr_reader :attempts
60
+ attr_reader :attempts, :port_open_status
57
61
 
58
62
  def attempts_exist?
59
63
  return false unless attempts
@@ -61,7 +65,7 @@ module Truemail
61
65
  end
62
66
 
63
67
  def session
64
- Net::SMTP.new(host, Truemail::Validate::Smtp::Request::SMTP_PORT).tap do |settings|
68
+ ::Net::SMTP.new(host, Truemail::Validate::Smtp::Request::SMTP_PORT).tap do |settings|
65
69
  settings.open_timeout = configuration.connection_timeout
66
70
  settings.read_timeout = configuration.response_timeout
67
71
  end
@@ -5,7 +5,7 @@ module Truemail
5
5
  class Smtp
6
6
  RESPONSE_ATTRS = %i[port_opened connection helo mailfrom rcptto errors].freeze
7
7
 
8
- Response = Struct.new(*RESPONSE_ATTRS, keyword_init: true) do
8
+ Response = ::Struct.new(*RESPONSE_ATTRS, keyword_init: true) do
9
9
  def initialize(errors: {}, **args)
10
10
  super
11
11
  end
@@ -5,13 +5,13 @@ module Truemail
5
5
  RESULT_ATTRS = %i[success email domain mail_servers errors smtp_debug configuration].freeze
6
6
  VALIDATION_TYPES = %i[regex mx smtp].freeze
7
7
 
8
- Result = Struct.new(*RESULT_ATTRS, keyword_init: true) do
8
+ Result = ::Struct.new(*RESULT_ATTRS, keyword_init: true) do
9
9
  def initialize(mail_servers: [], errors: {}, **args)
10
10
  super
11
11
  end
12
12
 
13
13
  def punycode_email
14
- @punycode_email ||= Truemail::PunycodeRepresenter.call(email)
14
+ @punycode_email ||= Truemail::Dns::PunycodeRepresenter.call(email)
15
15
  end
16
16
  alias_method :valid?, :success
17
17
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Truemail
4
- VERSION = '2.2.1'
4
+ VERSION = '2.3.2'
5
5
  end
@@ -15,10 +15,10 @@ module Truemail
15
15
  end
16
16
 
17
17
  def call(&block)
18
- Timeout.timeout(timeout, &block)
19
- rescue Resolv::ResolvError, IPAddr::InvalidAddressError
18
+ ::Timeout.timeout(timeout, &block)
19
+ rescue ::Resolv::ResolvError, ::IPAddr::InvalidAddressError
20
20
  false
21
- rescue Timeout::Error
21
+ rescue ::Timeout::Error
22
22
  retry unless (self.attempts -= 1).zero?
23
23
  false
24
24
  end
data/truemail.gemspec CHANGED
@@ -31,21 +31,23 @@ Gem::Specification.new do |spec|
31
31
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
32
  spec.require_paths = ['lib']
33
33
 
34
- spec.add_runtime_dependency 'simpleidn', '~> 0.1.1'
34
+ spec.add_runtime_dependency 'simpleidn', '~> 0.2.1'
35
35
 
36
36
  spec.add_development_dependency 'bundler', '~> 1.16'
37
37
  spec.add_development_dependency 'bundler-audit', '~> 0.7.0.1'
38
- spec.add_development_dependency 'faker', '~> 2.15', '>= 2.15.1'
39
- spec.add_development_dependency 'fasterer', '~> 0.8.3'
38
+ spec.add_development_dependency 'dns_mock', '~> 1.2'
39
+ spec.add_development_dependency 'faker', '~> 2.16'
40
+ spec.add_development_dependency 'fasterer', '~> 0.9.0'
40
41
  spec.add_development_dependency 'json_matchers', '~> 0.11.1'
41
42
  spec.add_development_dependency 'overcommit', '~> 0.57.0'
42
43
  spec.add_development_dependency 'pry-byebug', '~> 3.9'
43
- spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.1'
44
- spec.add_development_dependency 'reek', '~> 6.0', '>= 6.0.2'
44
+ spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.3'
45
+ spec.add_development_dependency 'reek', '~> 6.0', '>= 6.0.3'
45
46
  spec.add_development_dependency 'rspec', '~> 3.10'
46
- spec.add_development_dependency 'rubocop', '~> 1.5', '>= 1.5.2'
47
- spec.add_development_dependency 'rubocop-performance', '~> 1.9', '>= 1.9.1'
48
- spec.add_development_dependency 'rubocop-rspec', '~> 2.0', '>= 2.0.1'
47
+ spec.add_development_dependency 'rubocop', '~> 1.11'
48
+ spec.add_development_dependency 'rubocop-performance', '~> 1.10', '>= 1.10.1'
49
+ spec.add_development_dependency 'rubocop-rspec', '~> 2.2'
49
50
  spec.add_development_dependency 'simplecov', '~> 0.17.1'
50
- spec.add_development_dependency 'truemail-rspec', '~> 0.3.3'
51
+ spec.add_development_dependency 'truemail-rspec', '~> 0.4'
52
+ spec.add_development_dependency 'webmock', '~> 3.12', '>= 3.12.1'
51
53
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: truemail
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.1
4
+ version: 2.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladislav Trotsenko
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-12-06 00:00:00.000000000 Z
11
+ date: 2021-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simpleidn
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.1.1
19
+ version: 0.2.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.1.1
26
+ version: 0.2.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -53,39 +53,47 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.7.0.1
55
55
  - !ruby/object:Gem::Dependency
56
- name: faker
56
+ name: dns_mock
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '2.15'
62
- - - ">="
63
- - !ruby/object:Gem::Version
64
- version: 2.15.1
61
+ version: '1.2'
65
62
  type: :development
66
63
  prerelease: false
67
64
  version_requirements: !ruby/object:Gem::Requirement
68
65
  requirements:
69
66
  - - "~>"
70
67
  - !ruby/object:Gem::Version
71
- version: '2.15'
72
- - - ">="
68
+ version: '1.2'
69
+ - !ruby/object:Gem::Dependency
70
+ name: faker
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
73
74
  - !ruby/object:Gem::Version
74
- version: 2.15.1
75
+ version: '2.16'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.16'
75
83
  - !ruby/object:Gem::Dependency
76
84
  name: fasterer
77
85
  requirement: !ruby/object:Gem::Requirement
78
86
  requirements:
79
87
  - - "~>"
80
88
  - !ruby/object:Gem::Version
81
- version: 0.8.3
89
+ version: 0.9.0
82
90
  type: :development
83
91
  prerelease: false
84
92
  version_requirements: !ruby/object:Gem::Requirement
85
93
  requirements:
86
94
  - - "~>"
87
95
  - !ruby/object:Gem::Version
88
- version: 0.8.3
96
+ version: 0.9.0
89
97
  - !ruby/object:Gem::Dependency
90
98
  name: json_matchers
91
99
  requirement: !ruby/object:Gem::Requirement
@@ -137,7 +145,7 @@ dependencies:
137
145
  version: '13.0'
138
146
  - - ">="
139
147
  - !ruby/object:Gem::Version
140
- version: 13.0.1
148
+ version: 13.0.3
141
149
  type: :development
142
150
  prerelease: false
143
151
  version_requirements: !ruby/object:Gem::Requirement
@@ -147,7 +155,7 @@ dependencies:
147
155
  version: '13.0'
148
156
  - - ">="
149
157
  - !ruby/object:Gem::Version
150
- version: 13.0.1
158
+ version: 13.0.3
151
159
  - !ruby/object:Gem::Dependency
152
160
  name: reek
153
161
  requirement: !ruby/object:Gem::Requirement
@@ -157,7 +165,7 @@ dependencies:
157
165
  version: '6.0'
158
166
  - - ">="
159
167
  - !ruby/object:Gem::Version
160
- version: 6.0.2
168
+ version: 6.0.3
161
169
  type: :development
162
170
  prerelease: false
163
171
  version_requirements: !ruby/object:Gem::Requirement
@@ -167,7 +175,7 @@ dependencies:
167
175
  version: '6.0'
168
176
  - - ">="
169
177
  - !ruby/object:Gem::Version
170
- version: 6.0.2
178
+ version: 6.0.3
171
179
  - !ruby/object:Gem::Dependency
172
180
  name: rspec
173
181
  requirement: !ruby/object:Gem::Requirement
@@ -188,60 +196,48 @@ dependencies:
188
196
  requirements:
189
197
  - - "~>"
190
198
  - !ruby/object:Gem::Version
191
- version: '1.5'
192
- - - ">="
193
- - !ruby/object:Gem::Version
194
- version: 1.5.2
199
+ version: '1.11'
195
200
  type: :development
196
201
  prerelease: false
197
202
  version_requirements: !ruby/object:Gem::Requirement
198
203
  requirements:
199
204
  - - "~>"
200
205
  - !ruby/object:Gem::Version
201
- version: '1.5'
202
- - - ">="
203
- - !ruby/object:Gem::Version
204
- version: 1.5.2
206
+ version: '1.11'
205
207
  - !ruby/object:Gem::Dependency
206
208
  name: rubocop-performance
207
209
  requirement: !ruby/object:Gem::Requirement
208
210
  requirements:
209
211
  - - "~>"
210
212
  - !ruby/object:Gem::Version
211
- version: '1.9'
213
+ version: '1.10'
212
214
  - - ">="
213
215
  - !ruby/object:Gem::Version
214
- version: 1.9.1
216
+ version: 1.10.1
215
217
  type: :development
216
218
  prerelease: false
217
219
  version_requirements: !ruby/object:Gem::Requirement
218
220
  requirements:
219
221
  - - "~>"
220
222
  - !ruby/object:Gem::Version
221
- version: '1.9'
223
+ version: '1.10'
222
224
  - - ">="
223
225
  - !ruby/object:Gem::Version
224
- version: 1.9.1
226
+ version: 1.10.1
225
227
  - !ruby/object:Gem::Dependency
226
228
  name: rubocop-rspec
227
229
  requirement: !ruby/object:Gem::Requirement
228
230
  requirements:
229
231
  - - "~>"
230
232
  - !ruby/object:Gem::Version
231
- version: '2.0'
232
- - - ">="
233
- - !ruby/object:Gem::Version
234
- version: 2.0.1
233
+ version: '2.2'
235
234
  type: :development
236
235
  prerelease: false
237
236
  version_requirements: !ruby/object:Gem::Requirement
238
237
  requirements:
239
238
  - - "~>"
240
239
  - !ruby/object:Gem::Version
241
- version: '2.0'
242
- - - ">="
243
- - !ruby/object:Gem::Version
244
- version: 2.0.1
240
+ version: '2.2'
245
241
  - !ruby/object:Gem::Dependency
246
242
  name: simplecov
247
243
  requirement: !ruby/object:Gem::Requirement
@@ -262,14 +258,34 @@ dependencies:
262
258
  requirements:
263
259
  - - "~>"
264
260
  - !ruby/object:Gem::Version
265
- version: 0.3.3
261
+ version: '0.4'
266
262
  type: :development
267
263
  prerelease: false
268
264
  version_requirements: !ruby/object:Gem::Requirement
269
265
  requirements:
270
266
  - - "~>"
271
267
  - !ruby/object:Gem::Version
272
- version: 0.3.3
268
+ version: '0.4'
269
+ - !ruby/object:Gem::Dependency
270
+ name: webmock
271
+ requirement: !ruby/object:Gem::Requirement
272
+ requirements:
273
+ - - "~>"
274
+ - !ruby/object:Gem::Version
275
+ version: '3.12'
276
+ - - ">="
277
+ - !ruby/object:Gem::Version
278
+ version: 3.12.1
279
+ type: :development
280
+ prerelease: false
281
+ version_requirements: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - "~>"
284
+ - !ruby/object:Gem::Version
285
+ version: '3.12'
286
+ - - ">="
287
+ - !ruby/object:Gem::Version
288
+ version: 3.12.1
273
289
  description: Configurable framework agnostic plain Ruby email validator. Verify email
274
290
  via Regex, DNS and SMTP.
275
291
  email:
@@ -311,6 +327,9 @@ files:
311
327
  - lib/truemail/auditor.rb
312
328
  - lib/truemail/configuration.rb
313
329
  - lib/truemail/core.rb
330
+ - lib/truemail/dns/punycode_representer.rb
331
+ - lib/truemail/dns/resolver.rb
332
+ - lib/truemail/dns/worker.rb
314
333
  - lib/truemail/executor.rb
315
334
  - lib/truemail/log/event.rb
316
335
  - lib/truemail/log/serializer/auditor_json.rb