truemail 1.1.0 → 1.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/ISSUE_TEMPLATE.md +2 -2
- data/.github/PULL_REQUEST_TEMPLATE.md +1 -1
- data/.reek.yml +1 -0
- data/.rubocop.yml +3 -0
- data/Gemfile.lock +1 -1
- data/README.md +61 -7
- data/lib/truemail/configuration.rb +20 -11
- data/lib/truemail/validate/domain_list_match.rb +11 -3
- 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: 0dcc1349ffc22296ae3af4dd04ce6b42501964ff1ca2072791d3e41320478d38
|
4
|
+
data.tar.gz: 26e29784585ca4ca560f574d7cf60f23e9aa9300757f11a1567881efa826b53a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b51544bb6b74fe12510f1e008c1a2265ad4eb9fed77a4618025bccc22571c748d99d02ca8994504576b0011ca6064469f94b77c56f1d6dd4ed896cbb1c3f1929
|
7
|
+
data.tar.gz: 260c8f3c1b2a7d0fdce382d325a510187e1c92ec7d658f2c12e04ef231186ed49a433de826fec5f2ef9c6a30076ba04abd8f29636a10cee2a25711ad0337178d
|
data/.github/ISSUE_TEMPLATE.md
CHANGED
@@ -3,8 +3,8 @@
|
|
3
3
|
### New Issue Checklist
|
4
4
|
|
5
5
|
- [ ] I have updated truemail to the latest version
|
6
|
-
- [ ] I have read the [Contribution Guidelines](
|
7
|
-
- [ ] I have read the [documentation](
|
6
|
+
- [ ] I have read the [Contribution Guidelines](https://github.com/rubygarage/truemail/blob/master/CONTRIBUTING.md)
|
7
|
+
- [ ] I have read the [documentation](https://github.com/rubygarage/truemail/blob/master/README.md)
|
8
8
|
- [ ] I have searched for [existing GitHub issues](https://github.com/rubygarage/truemail/issues)
|
9
9
|
|
10
10
|
### Issue Description
|
@@ -40,7 +40,7 @@
|
|
40
40
|
- [ ] My code follows the code style of this project
|
41
41
|
- [ ] My change requires a change to the documentation
|
42
42
|
- [ ] I have updated the documentation accordingly
|
43
|
-
- [ ] I have read the [**CONTRIBUTING** document](
|
43
|
+
- [ ] I have read the [**CONTRIBUTING** document](https://github.com/rubygarage/truemail/blob/master/CONTRIBUTING.md)
|
44
44
|
- [ ] I have added tests to cover my changes
|
45
45
|
- [ ] I have run `bundle exec rspec` from the root directory to see all new and existing tests pass
|
46
46
|
- [ ] I have run `rubocop` and `reek` to ensure the code style is valid
|
data/.reek.yml
CHANGED
data/.rubocop.yml
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Truemail
|
2
2
|
|
3
|
-
[](https://codeclimate.com/github/rubygarage/truemail/maintainability) [](https://codeclimate.com/github/rubygarage/truemail/test_coverage) [](https://badge.fury.io/rb/truemail) [](https://codeclimate.com/github/rubygarage/truemail/maintainability) [](https://codeclimate.com/github/rubygarage/truemail/test_coverage) [](https://circleci.com/gh/rubygarage/truemail/tree/master) [](https://badge.fury.io/rb/truemail) [](https://rubygems.org/gems/truemail) [](CODE_OF_CONDUCT.md)
|
4
4
|
|
5
5
|
The Truemail gem helps you validate emails by regex pattern, presence of domain mx-records, and real existence of email account on a current email server. Also Truemail gem allows performing an audit of the host in which runs.
|
6
6
|
|
@@ -90,7 +90,12 @@ Truemail.configure do |config|
|
|
90
90
|
# return true. Other validations will not processed even if it was defined in validation_type_for
|
91
91
|
config.whitelisted_domains = ['somedomain1.com', 'somedomain2.com']
|
92
92
|
|
93
|
-
# Optional parameter.
|
93
|
+
# Optional parameter. With this option Truemail will validate email which contains whitelisted
|
94
|
+
# domain only, i.e. if domain whitelisted, validation will passed to Regex, MX or SMTP validators.
|
95
|
+
# Validation of email which not contains whitelisted domain always will return false.
|
96
|
+
config.whitelist_validation = true
|
97
|
+
|
98
|
+
# Optional parameter. Validation of email which contains blacklisted domain always will
|
94
99
|
# return false. Other validations will not processed even if it was defined in validation_type_for
|
95
100
|
config.blacklisted_domains = ['somedomain1.com', 'somedomain2.com']
|
96
101
|
|
@@ -116,6 +121,7 @@ Truemail.configuration
|
|
116
121
|
@connection_attempts=3,
|
117
122
|
@validation_type_by_domain={},
|
118
123
|
@whitelisted_domains=[],
|
124
|
+
@whitelist_validation=true,
|
119
125
|
@blacklisted_domains=[],
|
120
126
|
@verifier_domain="somedomain.com",
|
121
127
|
@verifier_email="verifier@example.com"
|
@@ -141,6 +147,7 @@ Truemail.configuration
|
|
141
147
|
@connection_attempts=1,
|
142
148
|
@validation_type_by_domain={},
|
143
149
|
@whitelisted_domains=[],
|
150
|
+
@whitelist_validation=true,
|
144
151
|
@blacklisted_domains=[],
|
145
152
|
@verifier_domain="somedomain.com",
|
146
153
|
@verifier_email="verifier@example.com",
|
@@ -168,7 +175,8 @@ Please note, other validations will not processed even if it was defined in ```v
|
|
168
175
|
|
169
176
|
**Sequence of domain list check:**
|
170
177
|
1. Whitelist check
|
171
|
-
2.
|
178
|
+
2. Whitelist validation check
|
179
|
+
3. Blacklist check
|
172
180
|
|
173
181
|
Example of usage:
|
174
182
|
|
@@ -201,6 +209,53 @@ Truemail.validate('email@white-domain.com')
|
|
201
209
|
@validation_type=:whitelist>
|
202
210
|
```
|
203
211
|
|
212
|
+
##### Whitelist validation case
|
213
|
+
|
214
|
+
```ruby
|
215
|
+
require 'truemail'
|
216
|
+
|
217
|
+
Truemail.configure do |config|
|
218
|
+
config.verifier_email = 'verifier@example.com'
|
219
|
+
config.whitelisted_domains = ['white-domain.com']
|
220
|
+
config.whitelist_validation = true
|
221
|
+
end
|
222
|
+
```
|
223
|
+
|
224
|
+
When email domain in whitelist and ```whitelist_validation``` is sets equal to ```true``` validation type will be passed to other validators.
|
225
|
+
Validation of email which not contains whitelisted domain always will return ```false```.
|
226
|
+
|
227
|
+
###### Email has whitelisted domain
|
228
|
+
|
229
|
+
```ruby
|
230
|
+
Truemail.validate('email@white-domain.com', with: :regex)
|
231
|
+
|
232
|
+
#<Truemail::Validator:0x000055b8429f3490
|
233
|
+
@result=#<struct Truemail::Validator::Result
|
234
|
+
success=true,
|
235
|
+
email="email@white-domain.com",
|
236
|
+
domain=nil,
|
237
|
+
mail_servers=[],
|
238
|
+
errors={},
|
239
|
+
smtp_debug=nil>,
|
240
|
+
@validation_type=:regex>
|
241
|
+
```
|
242
|
+
|
243
|
+
###### Email hasn't whitelisted domain
|
244
|
+
|
245
|
+
```ruby
|
246
|
+
Truemail.validate('email@domain.com', with: :regex)
|
247
|
+
|
248
|
+
#<Truemail::Validator:0x000055b8429f3490
|
249
|
+
@result=#<struct Truemail::Validator::Result
|
250
|
+
success=false,
|
251
|
+
email="email@domain.com",
|
252
|
+
domain=nil,
|
253
|
+
mail_servers=[],
|
254
|
+
errors={},
|
255
|
+
smtp_debug=nil>,
|
256
|
+
@validation_type=:blacklist>
|
257
|
+
```
|
258
|
+
|
204
259
|
##### Blacklist case
|
205
260
|
|
206
261
|
When email in blacklist, validation type will be redefined too. Validation result returns ```false```
|
@@ -384,6 +439,7 @@ Truemail.validate('email@example.com')
|
|
384
439
|
@smtp_safe_check=false,
|
385
440
|
@validation_type_by_domain={},
|
386
441
|
@whitelisted_domains=[],
|
442
|
+
@whitelist_validation=false,
|
387
443
|
@blacklisted_domains=[],
|
388
444
|
@verifier_domain="example.com",
|
389
445
|
@verifier_email="verifier@example.com">,
|
@@ -440,6 +496,7 @@ Truemail.validate('email@example.com')
|
|
440
496
|
@smtp_safe_check=true,
|
441
497
|
@validation_type_by_domain={},
|
442
498
|
@whitelisted_domains=[],
|
499
|
+
@whitelist_validation=false,
|
443
500
|
@blacklisted_domains=[],
|
444
501
|
@verifier_domain="example.com",
|
445
502
|
@verifier_email="verifier@example.com">,
|
@@ -480,6 +537,7 @@ Truemail.validate('email@example.com')
|
|
480
537
|
@smtp_safe_check=true,
|
481
538
|
@validation_type_by_domain={},
|
482
539
|
@whitelisted_domains=[],
|
540
|
+
@whitelist_validation=false,
|
483
541
|
@blacklisted_domains=[],
|
484
542
|
@verifier_domain="example.com",
|
485
543
|
@verifier_email="verifier@example.com">,
|
@@ -553,10 +611,6 @@ end
|
|
553
611
|
```
|
554
612
|
|
555
613
|
---
|
556
|
-
## ToDo
|
557
|
-
|
558
|
-
Fail validations logger
|
559
|
-
|
560
614
|
## Contributing
|
561
615
|
|
562
616
|
Bug reports and pull requests are welcome on GitHub at https://github.com/rubygarage/truemail. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct. Please check the [open tikets](https://github.com/rubygarage/truemail/issues). Be shure to follow Contributor Code of Conduct below and our [Contributing Guidelines](CONTRIBUTING.md).
|
@@ -19,21 +19,14 @@ module Truemail
|
|
19
19
|
:whitelisted_domains,
|
20
20
|
:blacklisted_domains
|
21
21
|
|
22
|
-
attr_accessor :smtp_safe_check
|
22
|
+
attr_accessor :whitelist_validation, :smtp_safe_check
|
23
23
|
|
24
24
|
alias retry_count connection_attempts
|
25
25
|
|
26
26
|
def initialize
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
@response_timeout = Truemail::Configuration::DEFAULT_RESPONSE_TIMEOUT
|
31
|
-
@connection_attempts = Truemail::Configuration::DEFAULT_CONNECTION_ATTEMPTS
|
32
|
-
@default_validation_type = Truemail::Configuration::DEFAULT_VALIDATION_TYPE
|
33
|
-
@validation_type_by_domain = {}
|
34
|
-
@whitelisted_domains = []
|
35
|
-
@blacklisted_domains = []
|
36
|
-
@smtp_safe_check = false
|
27
|
+
instance_initializer.each do |instace_variable, value|
|
28
|
+
instance_variable_set(:"@#{instace_variable}", value)
|
29
|
+
end
|
37
30
|
end
|
38
31
|
|
39
32
|
%i[email_pattern smtp_error_body_pattern].each do |method|
|
@@ -84,6 +77,22 @@ module Truemail
|
|
84
77
|
|
85
78
|
private
|
86
79
|
|
80
|
+
def instance_initializer
|
81
|
+
{
|
82
|
+
email_pattern: Truemail::RegexConstant::REGEX_EMAIL_PATTERN,
|
83
|
+
smtp_error_body_pattern: Truemail::RegexConstant::REGEX_SMTP_ERROR_BODY_PATTERN,
|
84
|
+
connection_timeout: Truemail::Configuration::DEFAULT_CONNECTION_TIMEOUT,
|
85
|
+
response_timeout: Truemail::Configuration::DEFAULT_RESPONSE_TIMEOUT,
|
86
|
+
connection_attempts: Truemail::Configuration::DEFAULT_CONNECTION_ATTEMPTS,
|
87
|
+
default_validation_type: Truemail::Configuration::DEFAULT_VALIDATION_TYPE,
|
88
|
+
validation_type_by_domain: {},
|
89
|
+
whitelisted_domains: [],
|
90
|
+
whitelist_validation: false,
|
91
|
+
blacklisted_domains: [],
|
92
|
+
smtp_safe_check: false
|
93
|
+
}
|
94
|
+
end
|
95
|
+
|
87
96
|
def raise_unless(argument_context, argument_name, condition)
|
88
97
|
raise Truemail::ArgumentError.new(argument_context, argument_name) unless condition
|
89
98
|
end
|
@@ -6,8 +6,8 @@ module Truemail
|
|
6
6
|
ERROR = 'blacklisted email'
|
7
7
|
|
8
8
|
def run
|
9
|
-
return success(true) if whitelisted_domain?
|
10
|
-
return unless blacklisted_domain?
|
9
|
+
return success(true) if whitelisted_domain? && !whitelist_validation?
|
10
|
+
return unless whitelist_validation_case? || blacklisted_domain?
|
11
11
|
success(false)
|
12
12
|
add_error(Truemail::Validate::DomainListMatch::ERROR)
|
13
13
|
end
|
@@ -19,7 +19,15 @@ module Truemail
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def whitelisted_domain?
|
22
|
-
configuration.whitelisted_domains.include?(email_domain)
|
22
|
+
@whitelisted_domain ||= configuration.whitelisted_domains.include?(email_domain)
|
23
|
+
end
|
24
|
+
|
25
|
+
def whitelist_validation?
|
26
|
+
configuration.whitelist_validation
|
27
|
+
end
|
28
|
+
|
29
|
+
def whitelist_validation_case?
|
30
|
+
whitelist_validation? && !whitelisted_domain?
|
23
31
|
end
|
24
32
|
|
25
33
|
def blacklisted_domain?
|
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.
|
4
|
+
version: 1.2.0
|
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-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|