Skip to content

Commit

Permalink
Feature/Event logger (#55)
Browse files Browse the repository at this point in the history
* Implemented Truemail::Logger class
* Implemented Truemail::Log::Event class
* Implemented Truemail::Log::Serializer::Base class
* Implemented Truemail::Log::Serializer::Text class
* Implemented Truemail::Log::Serializer::Json class
* Updated Truemail::Configuration
* Updated Truemail::Validator
* Updated Truemail::Validate::Regex
* Added changelog
* Updated gem version
* Updated gem description
* Updated readme
  • Loading branch information
bestwebua authored Oct 28, 2019
1 parent 8678125 commit b3e236a
Show file tree
Hide file tree
Showing 28 changed files with 1,847 additions and 66 deletions.
16 changes: 15 additions & 1 deletion .reek.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,17 @@ detectors:
- Truemail::Validate::Smtp::Request#run
- Truemail::Validate::Smtp#run
- Truemail::Validate::Mx#hosts_from_cname_records
- Truemail::Configuration#initialize
- Truemail::Configuration#logger=

TooManyInstanceVariables:
exclude:
- Truemail::Configuration
- Truemail::Validate::Smtp::Request

TooManyMethods:
exclude:
- Truemail::Configuration

Attribute:
exclude:
- Truemail::Configuration#whitelist_validation
Expand Down Expand Up @@ -48,7 +52,17 @@ detectors:
- Truemail::Validate::Smtp#not_includes_user_not_found_errors
- Truemail::GenerateEmailHelper#prepare_user_name
- Truemail::ConfigurationHelper#create_configuration
- Truemail::Log::Serializer::Base#smtp_debug
- Truemail::Log::Serializer::Text#data_composer

NilCheck:
exclude:
- Truemail::Validator#result_not_changed?
- Truemail::Configuration#logger=

BooleanParameter:
exclude:
- Truemail::Configuration#logger=

exclude_paths:
- spec/support/helpers/validator_helper.rb
350 changes: 350 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,350 @@
# Changelog
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.4.0] - 2019-10-28
### Added
- Event logger (ability to output validation logs to stdout/file)
- JSON serializer for validator instance
- [Changelog](CHANGELOG.md)
- [Logo](https://repository-images.githubusercontent.com/173723932/6dffee00-e88e-11e9-94b6-c97aacc0df00)

Truemail gem allows to output tracking events to stdout/file or both of these. Please note, at least one of the outputs must exist. Tracking event by default is `:error`

**Available tracking events**

- `:all`, all detected events including success validation cases
- `:unrecognized_error`, unrecognized errors only (when `smtp_safe_check = true` and SMTP server does not return an exact answer that the email does not exist)
- `:recognized_error`, recognized errors only
- `:error`, recognized and unrecognized errors only

```ruby
Truemail.configure do |config|
config.logger = { tracking_event: :all, stdout: true, log_absolute_path: '/home/app/log/truemail.log' }
end
```

Also starting from this version Truemail has built in JSON serializer for `Truemail::Validator` instance, so you can represent your email validation result as json.

```ruby
Truemail::Log::Serializer::Json.call(Truemail.validate('[email protected]'))
```

### Changed
- `Truemail::Configuration`
- `Truemail::Validator`
- `Truemail::Validate::Regex`
- `Truemail::VERSION`
- gem documentation
- gem description

## [1.3.0] - 2019-09-16
### Added
- Ability to create new `Truemail::Configuration` instance with block
- `Truemail::Validate::Smtp::Request::Configuration`

### Changed
- `Truemail::Wrapper`
- `Truemail::Validate::Base`
- `Truemail::Validator`
- `Truemail::Validator::Result`
- `Truemail::Validate::Regex`
- `Truemail::Validate::Mx`
- `Truemail::Validate::Smtp`
- `Truemail::Validate::Smtp::Request`
- `Truemail::Audit::Base`
- `Truemail::Auditor`
- `Truemail::Audit::Ptr`
- `::Truemail` module
- `Truemail::VERSION`
- gem documentation
- gem description

## [1.2.1] - 2019-06-27
### Fixed
- Removed memoization from ```DomainListMatch#whitelisted_domain?```

### Changed
- `Truemail::VERSION`
- gem documentation

## [1.2.0] - 2019-06-26
### Added
- Configurable option: validation for whitelisted domains only.

When email domain in whitelist and ```whitelist_validation``` is sets equal to ```true``` validation type will be passed to other validators. Validation of email which not contains whitelisted domain always will return ```false```.

```ruby
Truemail.configure do |config|
config.verifier_email = '[email protected]'
config.whitelisted_domains = ['white-domain.com']
config.whitelist_validation = true
end
```

**Email has whitelisted domain**

```ruby
Truemail.validate('[email protected]', with: :regex)

#<Truemail::Validator:0x000055b8429f3490
@result=#<struct Truemail::Validator::Result
success=true,
email="[email protected]",
domain=nil,
mail_servers=[],
errors={},
smtp_debug=nil>,
@validation_type=:regex>
```
**Email hasn't whitelisted domain**

```ruby
Truemail.validate('[email protected]', with: :regex)

#<Truemail::Validator:0x000055b8429f3490
@result=#<struct Truemail::Validator::Result
success=false,
email="[email protected]",
domain=nil,
mail_servers=[],
errors={},
smtp_debug=nil>,
@validation_type=:blacklist>
```

### Changed
- `Truemail::VERSION`
- gem documentation

## [1.1.0] - 2019-06-18
### Added
- Configurable default validation type, [issue details](https://github.com/rubygarage/truemail/issues/48)

You can predefine default validation type for ```Truemail.validate('[email protected]')``` call without with-parameter. Available validation types: ```:regex```, ```:mx```, ```:smtp```. By default validation type still remains ```:smtp```

```ruby
Truemail.configure do |config|
config.verifier_email = '[email protected]'
config.default_validation_type = :mx
end
```

### Changed
- `Truemail::VERSION`
- gem documentation

## [1.0.1] - 2019-06-08
### Added
- Result validation type marker for domain list match check

```ruby
Truemail.validate('[email protected]')

#<Truemail::Validator:0x000055b8429f3490
@result=#<struct Truemail::Validator::Result
success=true,
email="[email protected]",
domain=nil,
mail_servers=[],
errors={},
smtp_debug=nil>,
@validation_type=:whitelist>

Truemail.validate('[email protected]')

#<Truemail::Validator:0x000023y8429f3493
@result=#<struct Truemail::Validator::Result
success=false,
email="[email protected]",
domain=nil,
mail_servers=[],
errors={},
smtp_debug=nil>,
@validation_type=:blacklist>
```

### Changed
- `Truemail::VERSION`
- gem documentation

## [1.0] - 2019-06-04
### Added
- Feature domain whitelist blacklist. Other validations will not processed even if it was defined in ```validation_type_for```.

```ruby
Truemail.configure do |config|
# Optional parameter. Validation of email which contains whitelisted domain
# always will return true.
config.whitelisted_domains = ['somedomain1.com', 'somedomain2.com']

# Optional parameter. Validation of email which contains whitelisted domain
# always will return false.
config.blacklisted_domains = ['somedomain1.com', 'somedomain2.com']
end
```
and

```ruby
Truemail.configuration.whitelisted_domains = ['somedomain1.com', 'somedomain2.com']
Truemail.configuration.blacklisted_domains = ['somedomain1.com', 'somedomain2.com']
```

### Removed
- ```:skip``` validation type for ```validation_type_for```

### Fixed
- error key in `lower_snake_case`

### Changed
- `Truemail::VERSION`
- gem documentation

## [0.2] - 2019-05-23
### Added
- skip validation by domain for validation_type_for configuration option:

```ruby
Truemail.configure do |config|
config.validation_type_for = { 'somedomain.com' => :skip }
end
```
and
```ruby
Truemail.configuration.validation_type_for = { 'somedomain.com' => :skip }
```
### Changed
- `Truemail::VERSION`
- gem documentation

## [0.1.10] - 2019-05-10
### Added
- SMTP error body configurable option, [issue details](https://github.com/rubygarage/truemail/issues/19)

### Changed
- `Truemail::VERSION`
- gem documentation

## [0.1.9] - 2019-04-29
### Fixed
- Empty ptr constant

## [0.1.8] - 2019-04-29
### Added
- Reverse trace, [issue details](https://github.com/rubygarage/truemail/issues/18)

### Fixed
- Behaviour of current host address resolver, [issue details](https://github.com/rubygarage/truemail/issues/18)

### Changed
- `Truemail::VERSION`
- gem documentation

## [0.1.7] - 2019-04-17
### Added
- PTR record audit, [issue details](https://github.com/rubygarage/truemail/issues/18)

### Changed
- `Truemail::VERSION`
- gem documentation

## [0.1.6] - 2019-04-08
### Added
- MX gem logic with [RFC 7505](https://tools.ietf.org/html/rfc7505), null MX record supporting, [issue details](https://github.com/rubygarage/truemail/issues/27)
- [Contributing guideline](CONTRIBUTING.md)

### Fixed
- Multihomed MX records supporting, [issue details](https://github.com/rubygarage/truemail/issues/28)

### Changed
- `Truemail::VERSION`
- gem documentation

## [0.1.5] - 2019-04-05
### Added
- Retries for ```Truemail::Validate::Smtp``` for cases when one mx server

### Changed
- ```Truemail::Configuration``` class, please use ```.connection_attempts``` instead ```.retry_count```
- `Truemail::VERSION`
- gem documentation

## [0.1.4] - 2019-04-01
### Added
- Checking A record presence if ```MX``` and ```CNAME``` records not exist, [issue details](https://github.com/rubygarage/truemail/issues/10)
- Handling of ```CNAME``` records, [issue details](https://github.com/rubygarage/truemail/issues/11)
- Checking A record if ```MX``` and ```CNAME``` records not found, [issue details](https://github.com/rubygarage/truemail/issues/12)
- Supporting of multihomed MX records, conversion host names to ips, [issue details](https://github.com/rubygarage/truemail/issues/17)
- Timeout configuration for DNS resolver, [issue details](https://github.com/rubygarage/truemail/issues/13)
- ```.valid?``` helper

### Changed
- `Truemail::VERSION`
- gem documentation

## [0.1.3] - 2019-03-27
### Added
- Independent domain name extractor to ```Truemail::Validate::Mx#run```

### Fixed
- Default ```REGEX_EMAIL_PATTERN```, [issue details](https://github.com/rubygarage/truemail/issues/7)
* local part of address can't start with a dot or special symbol
* local part of address can include ```+``` symbol
- Default ```REGEX_DOMAIN_PATTERN```, [issue details](https://github.com/rubygarage/truemail/issues/8)
* TLD size increased up to 63 characters
- Case sensitive domain names, [issue details](https://github.com/rubygarage/truemail/issues/9)

### Changed
- `Truemail::VERSION`
- gem documentation

## [0.1.0] - 2019-03-26
### Added
- 'SMTP safe check' option for cases when SMTP server does not return an exact answer that the email does not exist.

```ruby
Truemail.configure do |config|
config.verifier_email = '[email protected]'
config.smtp_safe_check = true
end

Truemail.validate('[email protected]')

# Successful SMTP validation
=> #<Truemail::Validator:0x0000000002ca2c70
@result=
#<struct Truemail::Validator::Result
success=true,
email="[email protected]",
domain="example.com",
mail_servers=["mx1.example.com"],
errors={},
smtp_debug=
[#<Truemail::Validate::Smtp::Request:0x0000000002c95d40
@configuration=
#<Truemail::Configuration:0x0000000002c95b38
@connection_timeout=2,
@email_pattern=/regex_pattern/,
@response_timeout=2,
@smtp_safe_check=true,
@validation_type_by_domain={},
@verifier_domain="example.com",
@verifier_email="[email protected]">,
@email="[email protected]",
@host="mx1.example.com",
@response=
#<struct Truemail::Validate::Smtp::Response
port_opened=true,
connection=false,
helo=
#<Net::SMTP::Response:0x0000000002c934c8
@status="250",
@string="250 mx1.example.com\n">,
mailfrom=false,
rcptto=nil,
errors={:mailfrom=>"554 5.7.1 Client host blocked\n", :connection=>"server dropped connection after response"}>>,]>,
@validation_type=:smtp>
```

### Changed
- `Truemail::VERSION`
- gem documentation
Loading

0 comments on commit b3e236a

Please sign in to comment.