Skip to content

Commit a149a9b

Browse files
committed
Simplify predicate for ValidValidator
1 parent bf423d1 commit a149a9b

File tree

2 files changed

+16
-13
lines changed

2 files changed

+16
-13
lines changed

lib/value_objects/valid_validator.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ module ValueObjects
44
class ValidValidator < ActiveModel::EachValidator
55

66
def validate_each(record, attribute, value)
7-
record.errors.add(attribute, :invalid) unless value && (value.is_a?(Array) ? value.count(&:invalid?) == 0 : value.valid?)
7+
record.errors.add(attribute, :invalid) unless value && [*value].all?(&:valid?)
88
end
99

1010
end

spec/value_objects/valid_validator_spec.rb

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ class NilForbiddenRecord
2222

2323
end
2424

25+
let(:valid_value) { instance_double('ValidValue', valid?: true) }
26+
let(:invalid_value) { instance_double('InvalidValue', valid?: false) }
27+
2528
context 'with allow_nil' do
2629

2730
let(:record) { NilAllowedRecord.new(foo: value) }
@@ -41,7 +44,7 @@ class NilForbiddenRecord
4144

4245
context 'and invalid value' do
4346

44-
let(:value) { instance_double('InvalidValue', valid?: false) }
47+
let(:value) { invalid_value }
4548

4649
it 'fails validation' do
4750
aggregate_failures do
@@ -54,7 +57,7 @@ class NilForbiddenRecord
5457

5558
context 'and valid value' do
5659

57-
let(:value) { instance_double('ValidValue', valid?: true) }
60+
let(:value) { valid_value }
5861

5962
it 'passes validation' do
6063
aggregate_failures do
@@ -87,7 +90,7 @@ class NilForbiddenRecord
8790

8891
context 'and invalid value' do
8992

90-
let(:value) { instance_double('InvalidValue', valid?: false) }
93+
let(:value) { invalid_value }
9194

9295
it 'fails validation' do
9396
aggregate_failures do
@@ -100,7 +103,7 @@ class NilForbiddenRecord
100103

101104
context 'and valid value' do
102105

103-
let(:value) { instance_double('ValidValue', valid?: true) }
106+
let(:value) { valid_value }
104107

105108
it 'passes validation' do
106109
aggregate_failures do
@@ -133,12 +136,12 @@ class NilForbiddenRecord
133136
context 'and no invalid values' do
134137

135138
let(:values) { [value1, value2] }
136-
let(:value1) { instance_double('ValidValue') }
137-
let(:value2) { instance_double('ValidValue') }
139+
let(:value1) { valid_value }
140+
let(:value2) { valid_value }
138141

139142
it 'passes validation' do
140-
expect(value1).to receive(:invalid?).and_return(false).once
141-
expect(value2).to receive(:invalid?).and_return(false).once
143+
expect(value1).to receive(:valid?).and_return(true).once
144+
expect(value2).to receive(:valid?).and_return(true).once
142145
aggregate_failures do
143146
expect(record.valid?).to eq(true)
144147
expect(record.errors).to be_empty
@@ -150,12 +153,12 @@ class NilForbiddenRecord
150153
context 'and some invalid values' do
151154

152155
let(:values) { [value1, value2] }
153-
let(:value1) { instance_double('ValidValue') }
154-
let(:value2) { instance_double('InvalidValue') }
156+
let(:value1) { valid_value }
157+
let(:value2) { invalid_value }
155158

156159
it 'fails validation' do
157-
expect(value1).to receive(:invalid?).and_return(false).once
158-
expect(value2).to receive(:invalid?).and_return(true).once
160+
expect(value1).to receive(:valid?).and_return(true).once
161+
expect(value2).to receive(:valid?).and_return(false).once
159162
aggregate_failures do
160163
expect(record.valid?).to eq(false)
161164
expect(record.errors).to include(:foo)

0 commit comments

Comments
 (0)