Skip to content

Commit a8761d7

Browse files
author
Bilal Al
committed
Added nil check for all matchers and updated specs
1 parent b1529d2 commit a8761d7

12 files changed

Lines changed: 57 additions & 58 deletions

lib/splitclient-rb/engine/matchers/between_semver_matcher.rb

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,23 @@ def initialize(attribute, start_value, end_value, logger, validator)
1010
super(logger)
1111
@validator = validator
1212
@attribute = attribute
13-
@semver_start = SplitIoClient::Semver.new(start_value)
14-
@semver_end = SplitIoClient::Semver.new(end_value)
13+
@semver_start = SplitIoClient::Semver.build(start_value, logger)
14+
@semver_end = SplitIoClient::Semver.build(end_value, logger)
1515
@logger = logger
1616
end
1717

1818
def match?(args)
19-
@logger.log_if_debug('[BetweenSemverMatcher] evaluating value and attributes.')
19+
@logger.debug('[BetweenSemverMatcher] evaluating value and attributes.')
2020
return false unless @validator.valid_matcher_arguments(args)
2121

22-
value_to_match = args[:attributes][@attribute.to_sym]
23-
unless value_to_match.is_a?(String)
24-
@logger.log_if_debug('betweenStringMatcherData is required for BETWEEN_SEMVER matcher type')
22+
value_to_match = SplitIoClient::Semver.build(args[:attributes][@attribute.to_sym], @logger)
23+
unless !value_to_match.nil? && !@semver_start.nil? && !@semver_end.nil?
24+
@logger.error('betweenStringMatcherData is required for BETWEEN_SEMVER matcher type')
2525
return false
2626
end
27-
matches = ([0, -1].include?(@semver_start.compare(SplitIoClient::Semver.new(value_to_match))) &&
28-
[0, 1].include?(@semver_end.compare(SplitIoClient::Semver.new(value_to_match))))
29-
@logger.log_if_debug("[BetweenMatcher] #{value_to_match} matches -> #{matches}")
27+
matches = ([0, -1].include?(@semver_start.compare(value_to_match)) &&
28+
[0, 1].include?(@semver_end.compare(value_to_match)))
29+
@logger.debug("[BetweenMatcher] #{value_to_match} matches -> #{matches}")
3030
matches
3131
end
3232
end

lib/splitclient-rb/engine/matchers/equal_to_semver_matcher.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,21 @@ def initialize(attribute, string_value, logger, validator)
1010
super(logger)
1111
@validator = validator
1212
@attribute = attribute
13-
@semver = SplitIoClient::Semver.new(string_value)
13+
@semver = SplitIoClient::Semver.build(string_value, logger)
1414
@logger = logger
1515
end
1616

1717
def match?(args)
18-
@logger.log_if_debug('[EqualsToSemverMatcher] evaluating value and attributes.')
18+
@logger.debug('[EqualsToSemverMatcher] evaluating value and attributes.')
1919
return false unless @validator.valid_matcher_arguments(args)
2020

21-
value_to_match = args[:attributes][@attribute.to_sym]
22-
unless value_to_match.is_a?(String)
23-
@logger.log_if_debug('stringMatcherData is required for EQUAL_TO_SEMVER matcher type')
21+
value_to_match = SplitIoClient::Semver.build(args[:attributes][@attribute.to_sym], @logger)
22+
unless !value_to_match.nil? && !@semver.nil?
23+
@logger.error('stringMatcherData is required for EQUAL_TO_SEMVER matcher type')
2424
return false
2525
end
26-
matches = (@semver.version == SplitIoClient::Semver.new(value_to_match).version)
27-
@logger.log_if_debug("[EqualsToSemverMatcher] #{value_to_match} matches -> #{matches}")
26+
matches = (@semver.version == value_to_match.version)
27+
@logger.debug("[EqualsToSemverMatcher] #{value_to_match} matches -> #{matches}")
2828
matches
2929
end
3030
end

lib/splitclient-rb/engine/matchers/greater_than_or_equal_to_semver_matcher.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,21 @@ def initialize(attribute, string_value, logger, validator)
1010
super(logger)
1111
@validator = validator
1212
@attribute = attribute
13-
@semver = SplitIoClient::Semver.new(string_value)
13+
@semver = SplitIoClient::Semver.build(string_value, logger)
1414
@logger = logger
1515
end
1616

1717
def match?(args)
18-
@logger.log_if_debug('[GreaterThanOrEqualsToSemverMatcher] evaluating value and attributes.')
18+
@logger.debug('[GreaterThanOrEqualsToSemverMatcher] evaluating value and attributes.')
1919
return false unless @validator.valid_matcher_arguments(args)
2020

21-
value_to_match = args[:attributes][@attribute.to_sym]
22-
unless value_to_match.is_a?(String)
23-
@logger.log_if_debug('stringMatcherData is required for GREATER_THAN_OR_EQUAL_TO_SEMVER matcher type')
21+
value_to_match = SplitIoClient::Semver.build(args[:attributes][@attribute.to_sym], @logger)
22+
unless !value_to_match.nil? && !@semver.nil?
23+
@logger.error('stringMatcherData is required for GREATER_THAN_OR_EQUAL_TO_SEMVER matcher type')
2424
return false
2525
end
26-
matches = [0, 1].include?(@semver.compare(SplitIoClient::Semver.new(value_to_match)))
27-
@logger.log_if_debug("[GreaterThanOrEqualsToSemverMatcher] #{value_to_match} matches -> #{matches}")
26+
matches = [0, 1].include?(@semver.compare(value_to_match))
27+
@logger.debug("[GreaterThanOrEqualsToSemverMatcher] #{value_to_match} matches -> #{matches}")
2828
matches
2929
end
3030
end

lib/splitclient-rb/engine/matchers/in_list_semver_matcher.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,16 @@ def initialize(attribute, list_value, logger, validator)
1515
end
1616

1717
def match?(args)
18-
@logger.log_if_debug('[InListSemverMatcher] evaluating value and attributes.')
18+
@logger.debug('[InListSemverMatcher] evaluating value and attributes.')
1919
return false unless @validator.valid_matcher_arguments(args) && args[:attributes][@attribute.to_sym].is_a?(String)
2020

2121
value_to_match = SplitIoClient::Semver.build(args[:attributes][@attribute.to_sym], @logger)
2222
unless !value_to_match.nil? && @semver_list.all? { |n| !n.nil? }
23-
@logger.log_if_debug('whitelistMatcherData is required for IN_LIST_SEMVER matcher type')
23+
@logger.error('whitelistMatcherData is required for IN_LIST_SEMVER matcher type')
2424
return false
2525
end
2626
matches = (@semver_list.map { |item| item.version == value_to_match.version }).any? { |item| item == true }
27-
@logger.log_if_debug("[InListSemverMatcher] #{value_to_match} matches -> #{matches}")
27+
@logger.debug("[InListSemverMatcher] #{value_to_match} matches -> #{matches}")
2828
matches
2929
end
3030
end

lib/splitclient-rb/engine/matchers/less_than_or_equal_to_semver_matcher.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,21 @@ def initialize(attribute, string_value, logger, validator)
1010
super(logger)
1111
@validator = validator
1212
@attribute = attribute
13-
@semver = SplitIoClient::Semver.new(string_value)
13+
@semver = SplitIoClient::Semver.build(string_value, logger)
1414
@logger = logger
1515
end
1616

1717
def match?(args)
18-
@logger.log_if_debug('[LessThanOrEqualsToSemverMatcher] evaluating value and attributes.')
18+
@logger.debug('[LessThanOrEqualsToSemverMatcher] evaluating value and attributes.')
1919
return false unless @validator.valid_matcher_arguments(args)
2020

21-
value_to_match = args[:attributes][@attribute.to_sym]
22-
unless value_to_match.is_a?(String)
23-
@logger.log_if_debug('stringMatcherData is required for LESS_THAN_OR_EQUAL_TO_SEMVER matcher type')
21+
value_to_match = SplitIoClient::Semver.build(args[:attributes][@attribute.to_sym], @logger)
22+
unless !value_to_match.nil? && !@semver.nil?
23+
@logger.error('stringMatcherData is required for LESS_THAN_OR_EQUAL_TO_SEMVER matcher type')
2424
return false
2525
end
26-
matches = [0, -1].include?(@semver.compare(SplitIoClient::Semver.new(value_to_match)))
27-
@logger.log_if_debug("[LessThanOrEqualsToSemverMatcher] #{value_to_match} matches -> #{matches}")
26+
matches = [0, -1].include?(@semver.compare(value_to_match))
27+
@logger.debug("[LessThanOrEqualsToSemverMatcher] #{value_to_match} matches -> #{matches}")
2828
matches
2929
end
3030
end

lib/splitclient-rb/engine/matchers/semver.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ def initialize(version)
2727
# @return [type] Semver instance
2828
def self.build(version, logger)
2929
new(version)
30-
rescue RuntimeError => e
31-
logger.warn("Failed to parse Semver data: #{e}")
30+
rescue StandardError, NoMethodError => e
31+
logger.error("Failed to parse Semver data: #{e}")
3232
nil
3333
end
3434

spec/cache/repositories/splits_repository_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@
126126
}
127127
}]
128128
}
129-
repository.update([split], [], -1)
129+
repository.update([split.dup], [], -1)
130130
expect(repository.get_split('corge')[:conditions]).to eq [SplitIoClient::Cache::Repositories::SplitsRepository::DEFAULT_CONDITIONS_TEMPLATE]
131131

132132
# test with multiple conditions

spec/engine/matchers/matches_between_semver_matcher_spec.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
let(:config) { SplitIoClient::SplitConfig.new }
1212

1313
it 'initilized params' do
14-
matcher = described_class.new("version", raw[:betweenStringMatcherData][:start], raw[:betweenStringMatcherData][:end], config.split_logger, config.split_validator)
14+
matcher = described_class.new("version", raw[:betweenStringMatcherData][:start], raw[:betweenStringMatcherData][:end], config.logger, config.split_validator)
1515
expect(matcher.attribute).to eq("version")
1616
semver_start = matcher.instance_variable_get(:@semver_start)
1717
expect(semver_start.instance_variable_get(:@version)).to eq("2.1.8")
@@ -20,20 +20,20 @@
2020
end
2121

2222
it 'matches' do
23-
matcher = described_class.new("version", raw[:betweenStringMatcherData][:start], raw[:betweenStringMatcherData][:end], config.split_logger, config.split_validator)
23+
matcher = described_class.new("version", raw[:betweenStringMatcherData][:start], raw[:betweenStringMatcherData][:end], config.logger, config.split_validator)
2424
expect(matcher.match?(:attributes=>{"version": "2.1.8+rc"})).to eq(true)
2525
expect(matcher.match?(:attributes=>{"version": "2.1.9"})).to eq(true)
2626
expect(matcher.match?(:attributes=>{"version": "2.1.11-rc12"})).to eq(true)
2727
end
2828

2929
it 'does not match' do
30-
matcher = described_class.new("version", raw[:betweenStringMatcherData][:start], raw[:betweenStringMatcherData][:end], config.split_logger, config.split_validator)
30+
matcher = described_class.new("version", raw[:betweenStringMatcherData][:start], raw[:betweenStringMatcherData][:end], config.logger, config.split_validator)
3131
expect(matcher.match?(:attributes=>{"version": "2.1.5"})).to eq(false)
3232
expect(matcher.match?(:attributes=>{"version": "2.1.12-rc1"})).to eq(false)
3333
end
3434

3535
it 'invalid attribute' do
36-
matcher = described_class.new("version", raw[:betweenStringMatcherData][:start], raw[:betweenStringMatcherData][:end], config.split_logger, config.split_validator)
36+
matcher = described_class.new("version", raw[:betweenStringMatcherData][:start], raw[:betweenStringMatcherData][:end], config.logger, config.split_validator)
3737
expect(matcher.match?(:attributes=>{"version": 2.1})).to eq(false)
3838
expect(matcher.match?(:attributes=>{"version": nil})).to eq(false)
3939
end

spec/engine/matchers/matches_equal_to_semver_matcher_spec.rb

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,28 +11,27 @@
1111
let(:config) { SplitIoClient::SplitConfig.new }
1212

1313
it 'initilized params' do
14-
matcher = described_class.new("version", raw[:stringMatcherData], config.split_logger, config.split_validator)
14+
matcher = described_class.new("version", raw[:stringMatcherData], config.logger, config.split_validator)
1515
expect(matcher.attribute).to eq("version")
1616
semver = matcher.instance_variable_get(:@semver)
1717
expect(semver.instance_variable_get(:@version)).to eq("2.1.8")
1818
end
1919

2020
it 'matches' do
21-
matcher = described_class.new("version", raw[:stringMatcherData], config.split_logger, config.split_validator)
21+
matcher = described_class.new("version", raw[:stringMatcherData], config.logger, config.split_validator)
2222
expect(matcher.match?(:attributes=>{"version": "2.1.8"})).to eq(true)
2323
end
2424

2525
it 'does not match' do
26-
matcher = described_class.new("version", raw[:stringMatcherData], config.split_logger, config.split_validator)
26+
matcher = described_class.new("version", raw[:stringMatcherData], config.logger, config.split_validator)
2727
expect(matcher.match?(:attributes=>{"version": "2.1.8+rc"})).to eq(false)
2828
expect(matcher.match?(:attributes=>{"version": "2.1.5"})).to eq(false)
2929
expect(matcher.match?(:attributes=>{"version": "2.1.5-rc1"})).to eq(false)
3030
end
3131

3232
it 'invalid attribute' do
33-
matcher = described_class.new("version", raw[:stringMatcherData], config.split_logger, config.split_validator)
33+
matcher = described_class.new("version", raw[:stringMatcherData], config.logger, config.split_validator)
3434
expect(matcher.match?(:attributes=>{"version": 2.1})).to eq(false)
3535
expect(matcher.match?(:attributes=>{"version": nil})).to eq(false)
3636
end
37-
3837
end

spec/engine/matchers/matches_greater_than_or_equal_to_semver_matcher_spec.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,28 +11,28 @@
1111
let(:config) { SplitIoClient::SplitConfig.new }
1212

1313
it 'initilized params' do
14-
matcher = described_class.new("version", raw[:stringMatcherData], config.split_logger, config.split_validator)
14+
matcher = described_class.new("version", raw[:stringMatcherData], config.logger, config.split_validator)
1515
expect(matcher.attribute).to eq("version")
1616
semver = matcher.instance_variable_get(:@semver)
1717
expect(semver.instance_variable_get(:@version)).to eq("2.1.8")
1818
end
1919

2020
it 'matches' do
21-
matcher = described_class.new("version", raw[:stringMatcherData], config.split_logger, config.split_validator)
21+
matcher = described_class.new("version", raw[:stringMatcherData], config.logger, config.split_validator)
2222
expect(matcher.match?(:attributes=>{"version": "2.1.8+rc"})).to eq(true)
2323
expect(matcher.match?(:attributes=>{"version": "2.1.8"})).to eq(true)
2424
expect(matcher.match?(:attributes=>{"version": "2.1.5"})).to eq(true)
2525
expect(matcher.match?(:attributes=>{"version": "2.1.5-rc1"})).to eq(true)
2626
end
2727

2828
it 'does not match' do
29-
matcher = described_class.new("version", raw[:stringMatcherData], config.split_logger, config.split_validator)
29+
matcher = described_class.new("version", raw[:stringMatcherData], config.logger, config.split_validator)
3030
expect(matcher.match?(:attributes=>{"version": "2.1.11"})).to eq(false)
3131
expect(matcher.match?(:attributes=>{"version": "2.2.0"})).to eq(false)
3232
end
3333

3434
it 'invalid attribute' do
35-
matcher = described_class.new("version", raw[:stringMatcherData], config.split_logger, config.split_validator)
35+
matcher = described_class.new("version", raw[:stringMatcherData], config.logger, config.split_validator)
3636
expect(matcher.match?(:attributes=>{"version": 2.1})).to eq(false)
3737
expect(matcher.match?(:attributes=>{"version": nil})).to eq(false)
3838
end

0 commit comments

Comments
 (0)