Skip to content

Commit 9683dda

Browse files
authored
Feature/Ability to create ListMatch validation instances (#47)
* Added support for ListMatch validation layer * Updated runtime/development dependencies * Updated circleci/codeclimate configs * Updated gem readme, version, changelog
1 parent 69cc5b9 commit 9683dda

File tree

10 files changed

+85
-31
lines changed

10 files changed

+85
-31
lines changed

.circleci/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ jobs:
115115
- checkout
116116
- <<: *use_compatible_gemspec
117117
- ruby/install-deps:
118-
bundler-version: "2.3.23"
118+
bundler-version: "2.3.24"
119119
with-cache: false
120120
path: './vendor/custom_bundle'
121121
- run:

.circleci/gemspec_compatible

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
3131

3232
spec.add_runtime_dependency 'ffaker', '~> 2.21'
3333
spec.add_runtime_dependency 'rspec', '~> 3.11'
34-
spec.add_runtime_dependency 'truemail', '~> 2.7', '>= 2.7.4'
34+
spec.add_runtime_dependency 'truemail', '~> 3.0'
3535

3636
spec.add_development_dependency 'ffaker', '~> 2.21'
3737
spec.add_development_dependency 'pry-byebug', '~> 3.9'

.circleci/gemspec_latest

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
3232
spec.add_runtime_dependency 'ffaker', '~> 2.21'
3333
spec.add_runtime_dependency 'net-smtp', '~> 0.3.2'
3434
spec.add_runtime_dependency 'rspec', '~> 3.11'
35-
spec.add_runtime_dependency 'truemail', '~> 2.7', '>= 2.7.4'
35+
spec.add_runtime_dependency 'truemail', '~> 3.0'
3636

3737
spec.add_development_dependency 'bundler-audit', '~> 0.9.1'
3838
spec.add_development_dependency 'fasterer', '~> 0.10.0'
@@ -42,7 +42,7 @@ Gem::Specification.new do |spec|
4242
spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.6'
4343
spec.add_development_dependency 'reek', '~> 6.1', '>= 6.1.1'
4444
spec.add_development_dependency 'rspec', '~> 3.11'
45-
spec.add_development_dependency 'rubocop', '~> 1.36'
45+
spec.add_development_dependency 'rubocop', '~> 1.37'
4646
spec.add_development_dependency 'rubocop-performance', '~> 1.15'
4747
spec.add_development_dependency 'rubocop-rspec', '~> 2.13', '>= 2.13.2'
4848
spec.add_development_dependency 'simplecov', '~> 0.21.2'

.codeclimate.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ checks:
77
plugins:
88
rubocop:
99
enabled: true
10-
channel: rubocop-1-36
10+
channel: rubocop-1-37
1111

1212
reek:
1313
enabled: true

CHANGELOG.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,19 @@
22

33
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).
44

5+
## [1.0.0] - 2022-10-25
6+
7+
### Added
8+
9+
- Ability to create `Truemail::Validator` instance for `Whitelist/Blacklist` validation layer
10+
11+
### Updated
12+
13+
- Updated `Truemail::RSpec::ValidatorHelper::ValidatorFactory#process_validator_params`, tests
14+
- Updated gem runtime dependencies
15+
- Updated gem development dependencies
16+
- Updated gem readme, gem version
17+
518
## [0.9.2] - 2022-10-09
619

720
### Updated

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ create_servers_list(42) # => returns array with 42 random ip addresses
129129

130130
```ruby
131131
create_validator(
132-
validation_type, # optional, type:Symbol, can be :whitelist, :regex, :mx, :mx_blacklist or :smtp, by default creates :smtp validation
132+
validation_type, # optional, type:Symbol, can be :emails_list, :domains_list, :regex, :mx, :mx_blacklist or :smtp, by default creates :smtp validation
133133
email, # optional, type:String, by default random email
134134
mail_servers, # optional, type:Array(String), by default array with random ip addresses
135135
success: true, # optional, type:Bool, by default true

lib/truemail/rspec/validator_helper.rb

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
module Truemail
44
module RSpec
55
module ValidatorHelper
6+
VALIDATION_LIST_TYPE_REGEX_PATTERN = /(emails|domains)(_list)/.freeze
7+
68
def create_servers_list(size = nil)
79
::Array.new(size || ::Random.rand(1..4)) { ::FFaker::Internet.ip_v4_address }
810
end
@@ -122,13 +124,15 @@ def build
122124
attr_reader :success, :email, :mail_servers, :configuration
123125
attr_accessor :validation_type
124126

125-
def process_validator_params
127+
def process_validator_params # rubocop:disable Metrics/AbcSize
126128
case validation_type
127-
when :whitelist
129+
when Truemail::RSpec::ValidatorHelper::VALIDATION_LIST_TYPE_REGEX_PATTERN
130+
list_type = validation_type[Truemail::RSpec::ValidatorHelper::VALIDATION_LIST_TYPE_REGEX_PATTERN, 1]
128131
self.validation_type = nil
129-
method = success ? :whitelisted_domains : :blacklisted_domains
130-
domain = email[Truemail::RegexConstant::REGEX_EMAIL_PATTERN, 3]
131-
configuration.tap { |config| config.public_send(method) << domain }
132+
method = success ? :"whitelisted_#{list_type}" : :"blacklisted_#{list_type}"
133+
configuration.tap do |config|
134+
config.public_send(method) << (list_type.eql?('emails') ? email : email[Truemail::RegexConstant::REGEX_EMAIL_PATTERN, 3])
135+
end
132136
when :mx_blacklist
133137
configuration.blacklisted_mx_ip_addresses.push(*mail_servers) unless success
134138
end

lib/truemail/rspec/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22

33
module Truemail
44
module RSpec
5-
VERSION = '0.9.2'
5+
VERSION = '1.0.0'
66
end
77
end

spec/truemail/rspec/validator_helper_spec.rb

Lines changed: 55 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# frozen_string_literal: true
22

33
RSpec.describe Truemail::RSpec::ValidatorHelper, type: :helper do
4+
describe 'defined constants' do
5+
it { expect(described_class).to be_const_defined(:VALIDATION_LIST_TYPE_REGEX_PATTERN) }
6+
end
7+
48
describe '#create_servers_list' do
59
context 'without size' do
610
subject(:servers_list) { create_servers_list }
@@ -36,6 +40,7 @@
3640
let(:validator_instance_result) { validator_instance.result }
3741
let(:validator_instance_result_configuration) { validator_instance_result.configuration }
3842
let(:success_status) { true }
43+
let(:expected_vlidation_type) { validation_type }
3944

4045
shared_examples 'successful validator instance' do
4146
it 'creates successful validator instance' do
@@ -44,19 +49,35 @@
4449
expect(validator_instance_result.errors).to be_empty
4550
expect(validator_instance_result.smtp_debug).to be_nil
4651
expect(validator_instance_result_configuration).to be_an_instance_of(Truemail::Configuration)
47-
expect(validator_instance.validation_type).to eq(validation_type)
52+
expect(validator_instance.validation_type).to eq(expected_vlidation_type)
4853
end
4954
end
5055

51-
context 'with whitelist validation type' do
52-
let(:validation_type) { :whitelist }
56+
context 'with list match validation type' do
57+
let(:expected_vlidation_type) { :whitelist }
5358

54-
include_examples 'successful validator instance'
59+
context 'with emails list validation type' do
60+
let(:validation_type) { :emails_list }
5561

56-
it 'has necessary validator instance result attributes' do
57-
expect(validator_instance_result.domain).not_to be_nil
58-
expect(validator_instance_result.mail_servers).to be_empty
59-
expect(validator_instance_result_configuration.whitelisted_domains).not_to be_empty
62+
include_examples 'successful validator instance'
63+
64+
it 'has necessary validator instance result attributes' do
65+
expect(validator_instance_result.domain).to be_nil
66+
expect(validator_instance_result.mail_servers).to be_empty
67+
expect(validator_instance_result_configuration.whitelisted_emails).not_to be_empty
68+
end
69+
end
70+
71+
context 'with domains list validation type' do
72+
let(:validation_type) { :domains_list }
73+
74+
include_examples 'successful validator instance'
75+
76+
it 'has necessary validator instance result attributes' do
77+
expect(validator_instance_result.domain).not_to be_nil
78+
expect(validator_instance_result.mail_servers).to be_empty
79+
expect(validator_instance_result_configuration.whitelisted_domains).not_to be_empty
80+
end
6081
end
6182
end
6283

@@ -131,18 +152,34 @@
131152
end
132153
end
133154

134-
context 'with whitelist validation type' do
135-
let(:validation_type) { :whitelist }
155+
context 'with list match validation type' do
156+
let(:expected_vlidation_type) { :whitelist }
136157

137-
include_examples 'fail validator instance'
158+
shared_examples 'has necessary validator instance result attributes' do
159+
it 'has necessary validator instance result attributes' do
160+
expect(validator_instance_result.domain).not_to be_nil
161+
expect(validator_instance_result.errors).to include(:list_match)
162+
expect(validator_instance_result.mail_servers).to be_empty
163+
expect(validator_instance_result.smtp_debug).to be_nil
164+
expect(target_blacklist).not_to be_empty
165+
expect(validator_instance.validation_type).to eq(:blacklist)
166+
end
167+
end
138168

139-
it 'has necessary validator instance result attributes' do
140-
expect(validator_instance_result.domain).not_to be_nil
141-
expect(validator_instance_result.errors).to include(:domain_list_match)
142-
expect(validator_instance_result.mail_servers).to be_empty
143-
expect(validator_instance_result.smtp_debug).to be_nil
144-
expect(validator_instance_result_configuration.blacklisted_domains).not_to be_empty
145-
expect(validator_instance.validation_type).to eq(:blacklist)
169+
context 'with emails list validation type' do
170+
let(:validation_type) { :emails_list }
171+
let(:target_blacklist) { validator_instance_result_configuration.blacklisted_emails }
172+
173+
include_examples 'fail validator instance'
174+
include_examples 'has necessary validator instance result attributes'
175+
end
176+
177+
context 'with domains list validation type' do
178+
let(:validation_type) { :domains_list }
179+
let(:target_blacklist) { validator_instance_result_configuration.blacklisted_domains }
180+
181+
include_examples 'fail validator instance'
182+
include_examples 'has necessary validator instance result attributes'
146183
end
147184
end
148185

truemail-rspec.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
3232
spec.add_runtime_dependency 'ffaker', '~> 2.21'
3333
spec.add_runtime_dependency 'net-smtp', '~> 0.3.2' if ::RUBY_VERSION >= '3.1.0'
3434
spec.add_runtime_dependency 'rspec', '~> 3.11'
35-
spec.add_runtime_dependency 'truemail', '~> 2.7', '>= 2.7.4'
35+
spec.add_runtime_dependency 'truemail', '~> 3.0'
3636

3737
spec.add_development_dependency 'ffaker', '~> 2.21'
3838
spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.6'

0 commit comments

Comments
 (0)