truemail 1.0.0 → 1.0.1
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/.reek.yml +1 -0
- data/Gemfile.lock +1 -1
- data/README.md +88 -4
- data/lib/truemail/configuration.rb +11 -8
- data/lib/truemail/validator.rb +5 -1
- data/lib/truemail/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d6ae9e8559f02e6dc3c192d25b68299d710b0f725d6415dcce94291b67cfedec
|
4
|
+
data.tar.gz: ca8150d40f29c19424c75203ebc8725a158f9ab211e31fed6139258f850f061e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 756ac97059a71e39fff2161c9d484ac5c916061403d7165fb1afd45c1d363928c10330fc0175ed33fe0915eedc503b237e8c796fe1cdfd4c80a7dc7c2fc4d6f5
|
7
|
+
data.tar.gz: 565ab89967301f5f8b9cd5cd6c230ee6c1a6e908776532f1346131850afccfe72063bb2acc05b573b806c8cd8be13b0f085eaadf136de9165ace3a6ee232651e
|
data/.reek.yml
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -77,7 +77,8 @@ Truemail.configure do |config|
|
|
77
77
|
# Optional parameter. You can predefine which type of validation will be used for domains.
|
78
78
|
# Also you can skip validation by domain. Available validation types: :regex, :mx, :smtp
|
79
79
|
# This configuration will be used over current or default validation type parameter
|
80
|
-
# All of validations for 'somedomain.com' will be processed with
|
80
|
+
# All of validations for 'somedomain.com' will be processed with regex validation only.
|
81
|
+
# And all of validations for 'otherdomain.com' will be processed with mx validation only.
|
81
82
|
config.validation_type_for = { 'somedomain.com' => :regex, 'otherdomain.com' => :mx }
|
82
83
|
|
83
84
|
# Optional parameter. Validation of email which contains whitelisted domain always will
|
@@ -154,9 +155,92 @@ Truemail.configuration
|
|
154
155
|
|
155
156
|
### Validation features
|
156
157
|
|
158
|
+
#### Whitelist/Blacklist check
|
159
|
+
|
160
|
+
Whitelist/Blacklist check is zero validation level. You can define white and black list domains. It means that validation of email which contains whitelisted domain always will return ```true```, and for blacklisted domain will return ```false```.
|
161
|
+
|
162
|
+
Please note, other validations will not processed even if it was defined in ```validation_type_for```.
|
163
|
+
|
164
|
+
**Sequence of domain list check:**
|
165
|
+
1. Whitelist check
|
166
|
+
2. Blacklist check
|
167
|
+
|
168
|
+
Example of usage:
|
169
|
+
|
170
|
+
```ruby
|
171
|
+
require 'truemail'
|
172
|
+
|
173
|
+
Truemail.configure do |config|
|
174
|
+
config.verifier_email = 'verifier@example.com'
|
175
|
+
config.whitelisted_domains = ['white-domain.com', 'somedomain.com']
|
176
|
+
config.blacklisted_domains = ['black-domain.com', 'somedomain.com']
|
177
|
+
config.validation_type_for = { 'somedomain.com' => :mx }
|
178
|
+
end
|
179
|
+
```
|
180
|
+
|
181
|
+
##### Whitelist case
|
182
|
+
|
183
|
+
When email in whitelist, validation type will be redefined. Validation result returns ```true```
|
184
|
+
|
185
|
+
```ruby
|
186
|
+
Truemail.validate('email@white-domain.com')
|
187
|
+
|
188
|
+
#<Truemail::Validator:0x000055b8429f3490
|
189
|
+
@result=#<struct Truemail::Validator::Result
|
190
|
+
success=true,
|
191
|
+
email="email@white-domain.com",
|
192
|
+
domain=nil,
|
193
|
+
mail_servers=[],
|
194
|
+
errors={},
|
195
|
+
smtp_debug=nil>,
|
196
|
+
@validation_type=:whitelist>
|
197
|
+
```
|
198
|
+
|
199
|
+
##### Blacklist case
|
200
|
+
|
201
|
+
When email in blacklist, validation type will be redefined too. Validation result returns ```false```
|
202
|
+
|
203
|
+
```ruby
|
204
|
+
Truemail.validate('email@black-domain.com')
|
205
|
+
|
206
|
+
#<Truemail::Validator:0x000023y8429f3493
|
207
|
+
@result=#<struct Truemail::Validator::Result
|
208
|
+
success=false,
|
209
|
+
email="email@black-domain.com",
|
210
|
+
domain=nil,
|
211
|
+
mail_servers=[],
|
212
|
+
errors={},
|
213
|
+
smtp_debug=nil>,
|
214
|
+
@validation_type=:blacklist>
|
215
|
+
```
|
216
|
+
|
217
|
+
##### Duplication case
|
218
|
+
|
219
|
+
Validation result for this email returns ```true```, because it was found in whitelisted domains list first. Also ```validation_type``` for this case will be redefined.
|
220
|
+
|
221
|
+
```ruby
|
222
|
+
Truemail.validate('email@somedomain.com')
|
223
|
+
|
224
|
+
#<Truemail::Validator:0x000055b8429f3490
|
225
|
+
@result=#<struct Truemail::Validator::Result
|
226
|
+
success=true,
|
227
|
+
email="email@somedomain.com",
|
228
|
+
domain=nil,
|
229
|
+
mail_servers=[],
|
230
|
+
errors={},
|
231
|
+
smtp_debug=nil>,
|
232
|
+
@validation_type=:whitelist>
|
233
|
+
```
|
234
|
+
|
157
235
|
#### Regex validation
|
158
236
|
|
159
|
-
Validation with regex pattern is the first validation level.
|
237
|
+
Validation with regex pattern is the first validation level. It uses whitelist/blacklist check before running itself.
|
238
|
+
|
239
|
+
```code
|
240
|
+
[Whitelist/Blacklist] -> [Regex validation]
|
241
|
+
```
|
242
|
+
|
243
|
+
By default this validation not performs strictly following [RFC 5322](https://www.ietf.org/rfc/rfc5322.txt) standard, so you can override Truemail default regex pattern if you want.
|
160
244
|
|
161
245
|
Example of usage:
|
162
246
|
|
@@ -211,7 +295,7 @@ Truemail.validate('email@example.com', with: :regex)
|
|
211
295
|
Validation by MX records is the second validation level. It uses Regex validation before running itself. When regex validation has completed successfully then runs itself.
|
212
296
|
|
213
297
|
```code
|
214
|
-
[Regex validation] -> [MX validation]
|
298
|
+
[Whitelist/Blacklist] -> [Regex validation] -> [MX validation]
|
215
299
|
```
|
216
300
|
|
217
301
|
Please note, Truemail MX validator not performs strict compliance of the [RFC 5321](https://tools.ietf.org/html/rfc5321#section-5) standard for best validation outcome.
|
@@ -244,7 +328,7 @@ Truemail.validate('email@example.com', with: :mx)
|
|
244
328
|
SMTP validation is a final, third validation level. This type of validation tries to check real existence of email account on a current email server. This validation runs a chain of previous validations and if they're complete successfully then runs itself.
|
245
329
|
|
246
330
|
```code
|
247
|
-
[Regex validation] -> [MX validation] -> [SMTP validation]
|
331
|
+
[Whitelist/Blacklist] -> [Regex validation] -> [MX validation] -> [SMTP validation]
|
248
332
|
```
|
249
333
|
|
250
334
|
If total count of MX servers is equal to one, ```Truemail::Smtp``` validator will use value from ```Truemail.configuration.connection_attempts``` as connection attempts. By default it's equal 2.
|
@@ -35,7 +35,7 @@ module Truemail
|
|
35
35
|
|
36
36
|
%i[email_pattern smtp_error_body_pattern].each do |method|
|
37
37
|
define_method("#{method}=") do |argument|
|
38
|
-
|
38
|
+
raise_unless(argument, __method__, argument.is_a?(Regexp))
|
39
39
|
instance_variable_set(:"@#{method}", argument)
|
40
40
|
end
|
41
41
|
end
|
@@ -53,7 +53,7 @@ module Truemail
|
|
53
53
|
|
54
54
|
%i[connection_timeout response_timeout connection_attempts].each do |method|
|
55
55
|
define_method("#{method}=") do |argument|
|
56
|
-
|
56
|
+
raise_unless(argument, __method__, argument.is_a?(Integer) && argument.positive?)
|
57
57
|
instance_variable_set(:"@#{method}", argument)
|
58
58
|
end
|
59
59
|
end
|
@@ -65,7 +65,7 @@ module Truemail
|
|
65
65
|
|
66
66
|
%i[whitelisted_domains blacklisted_domains].each do |method|
|
67
67
|
define_method("#{method}=") do |argument|
|
68
|
-
|
68
|
+
raise_unless(argument, __method__, argument.is_a?(Array) && check_domain_list(argument))
|
69
69
|
instance_variable_set(:"@#{method}", argument)
|
70
70
|
end
|
71
71
|
end
|
@@ -76,9 +76,13 @@ module Truemail
|
|
76
76
|
|
77
77
|
private
|
78
78
|
|
79
|
+
def raise_unless(argument_context, argument_name, condition)
|
80
|
+
raise Truemail::ArgumentError.new(argument_context, argument_name) unless condition
|
81
|
+
end
|
82
|
+
|
79
83
|
def validate_arguments(argument, method)
|
80
84
|
constant = Truemail::RegexConstant.const_get("regex_#{method[/\A.+_(.+)\=\z/, 1]}_pattern".upcase)
|
81
|
-
|
85
|
+
raise_unless(argument, method, constant.match?(argument.to_s))
|
82
86
|
end
|
83
87
|
|
84
88
|
def default_verifier_domain
|
@@ -90,7 +94,7 @@ module Truemail
|
|
90
94
|
end
|
91
95
|
|
92
96
|
def check_domain(domain)
|
93
|
-
|
97
|
+
raise_unless(domain, 'domain', domain_matcher.call(domain))
|
94
98
|
end
|
95
99
|
|
96
100
|
def check_domain_list(domains)
|
@@ -98,12 +102,11 @@ module Truemail
|
|
98
102
|
end
|
99
103
|
|
100
104
|
def check_validation_type(validation_type)
|
101
|
-
|
102
|
-
Truemail::Validator::VALIDATION_TYPES.include?(validation_type)
|
105
|
+
raise_unless(validation_type, 'validation type', Truemail::Validator::VALIDATION_TYPES.include?(validation_type))
|
103
106
|
end
|
104
107
|
|
105
108
|
def validate_validation_type(settings)
|
106
|
-
|
109
|
+
raise_unless(settings, 'hash with settings', settings.is_a?(Hash))
|
107
110
|
settings.each do |domain, validation_type|
|
108
111
|
check_domain(domain)
|
109
112
|
check_validation_type(validation_type)
|
data/lib/truemail/validator.rb
CHANGED
@@ -22,7 +22,7 @@ module Truemail
|
|
22
22
|
|
23
23
|
def run
|
24
24
|
Truemail::Validate::DomainListMatch.check(result)
|
25
|
-
Truemail::Validate.const_get(validation_type.capitalize).check(result)
|
25
|
+
result_not_changed? ? Truemail::Validate.const_get(validation_type.capitalize).check(result) : update_validation_type
|
26
26
|
self
|
27
27
|
end
|
28
28
|
|
@@ -32,6 +32,10 @@ module Truemail
|
|
32
32
|
result.success.nil?
|
33
33
|
end
|
34
34
|
|
35
|
+
def update_validation_type
|
36
|
+
@validation_type = result.success ? :whitelist : :blacklist
|
37
|
+
end
|
38
|
+
|
35
39
|
def select_validation_type(email, current_validation_type)
|
36
40
|
domain = email[Truemail::RegexConstant::REGEX_EMAIL_PATTERN, 3]
|
37
41
|
Truemail.configuration.validation_type_by_domain[domain] || current_validation_type
|
data/lib/truemail/version.rb
CHANGED
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: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vladislav Trotsenko
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-06-
|
11
|
+
date: 2019-06-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|