Skip to content

Commit 717959f

Browse files
committed
Improve merge! to use key format and ignore value
This method is just a convenient way to merge an already computed hash but we should respect the key format and ignore value just like manually interating and setting each key and value.
1 parent 03c9e9b commit 717959f

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

lib/abstract_builder.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ def set!(key, value)
2929
end
3030

3131
def merge!(value)
32-
@stack << [:merge, value]
32+
value.each_pair do |key, value|
33+
set! key, value
34+
end
3335
end
3436

3537
def call(object, *keys)
@@ -64,8 +66,6 @@ def data!
6466
when :set
6567
key = _format_key(key)
6668
data[key] = value unless _ignore_value?(value)
67-
when :merge
68-
data.merge!(key)
6969
else
7070
raise ArgumentError, "Unexpected command: #{command.inspect}"
7171
end

spec/abstract_builder_spec.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,24 @@
5858

5959
expect(subject.data!).to eq(key: "value")
6060
end
61+
62+
it "formats keys of the given hash" do
63+
subject.format_key! { |key| key.upcase }
64+
65+
subject.merge! key: true
66+
67+
expect(subject.data!).to eq(
68+
KEY: true
69+
)
70+
end
71+
72+
it "ignores values of the given hash" do
73+
subject.ignore_value! { |value| value.nil? }
74+
75+
subject.merge! absence: nil, presence: true
76+
77+
expect(subject.data!).to eq(presence: true)
78+
end
6179
end
6280

6381
describe "#call" do

0 commit comments

Comments
 (0)