Skip to content

Commit d0a0e80

Browse files
committed
Merge pull request #1 from tinkerbox/enhancement/suggestions
Some minor suggestions
2 parents bf423d1 + 8d769f8 commit d0a0e80

File tree

3 files changed

+20
-17
lines changed

3 files changed

+20
-17
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 && Array(value).count(&:invalid?) == 0
88
end
99

1010
end

lib/value_objects/value.rb

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ class Value
77
include ::ActiveModel::Validations
88

99
def ==(other)
10-
self.class == other.class && self.class.attrs.all? { |key| send(key) == other.send(key) }
10+
self.class == other.class && self.class.attrs.all? { |key| public_send(key) == other.public_send(key) }
1111
end
1212

1313
def to_hash
14-
self.class.attrs.each_with_object({}) { |key, hash| hash[key] = send(key) }
14+
self.class.attrs.each_with_object({}) { |key, hash| hash[key] = public_send(key) }
1515
end
1616

1717
class << self
@@ -51,9 +51,7 @@ def new(attributes)
5151
# Data encoded with the 'application/x-www-form-urlencoded' media type cannot represent empty collections.
5252
# As a workaround, a dummy item can be added to the collection with it's key set to '-1'.
5353
# This dummy item will be ignored when initializing the value collection.
54-
values = []
55-
attributes.each { |k, v| values << @value_class.new(v) if k != '-1' }
56-
values
54+
attributes.map { |k, v| @value_class.new(v) if k != '-1' }.compact
5755
end
5856

5957
def load(values)

spec/value_objects/valid_validator_spec.rb

Lines changed: 16 additions & 11 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', invalid?: false) }
26+
let(:invalid_value) { instance_double('InvalidValue', invalid?: true) }
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,8 +136,8 @@ 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
140143
expect(value1).to receive(:invalid?).and_return(false).once
@@ -149,13 +152,15 @@ class NilForbiddenRecord
149152

150153
context 'and some invalid values' do
151154

152-
let(:values) { [value1, value2] }
153-
let(:value1) { instance_double('ValidValue') }
154-
let(:value2) { instance_double('InvalidValue') }
155+
let(:values) { [value1, value2, value3] }
156+
let(:value1) { invalid_value }
157+
let(:value2) { valid_value }
158+
let(:value3) { invalid_value }
155159

156160
it 'fails validation' do
157-
expect(value1).to receive(:invalid?).and_return(false).once
158-
expect(value2).to receive(:invalid?).and_return(true).once
161+
expect(value1).to receive(:invalid?).and_return(true).once
162+
expect(value2).to receive(:invalid?).and_return(false).once
163+
expect(value3).to receive(:invalid?).and_return(true).once
159164
aggregate_failures do
160165
expect(record.valid?).to eq(false)
161166
expect(record.errors).to include(:foo)

0 commit comments

Comments
 (0)