Skip to content

Commit

Permalink
Correct deep merge behavior #264
Browse files Browse the repository at this point in the history
  • Loading branch information
oneiros committed Mar 1, 2024
1 parent 9d13669 commit 9e8b9dd
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 3 deletions.
4 changes: 2 additions & 2 deletions app/controllers/lookups_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ class LookupsController < ApplicationController

def show
@result = @key.lookup(@node)
rescue Hdm::Error => error
@error = error
rescue Hdm::Error => e
@error = e

render action: "error"
end
Expand Down
1 change: 0 additions & 1 deletion app/models/hiera_data/lookup.rb
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ def flat_hash_merge(values)
def deep_merge(values)
values.inject do |memo, value|
memo ||= {}
raise Hdm::Error, "Merge strategy `deep` can only be used with hashes and arrays." unless value.is_a?(Hash) || value.is_a?(Array)

DeepMerge.deep_merge!(memo, value, merge_hash_arrays: true)
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ hdm_nested_hash:
integer: 32
added_by_common: common
hdm_mixed_types: 42
hdm_mixed_types2:
from_common: 42
lookup_options:
'^hdm_duplicates':
merge: hash
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,4 @@ hdm_nested_hash:
integer: 5
hdm_mixed_types:
from_node: 23
hdm_mixed_types2: 23
12 changes: 12 additions & 0 deletions test/models/hiera_data/lookup_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,18 @@ class LookupTest < ActiveSupport::TestCase
assert_equal expected, result
end

test "looking up a mixed value key where a hash is on the highest layer with merge strategy `deep`" do
result = perform_lookup("hdm_mixed_types", merge_strategy: :deep)

assert_equal({ "from_node" => 23 }, result)
end

test "looking up a mixed value key where a hash is on the lowest layer with merge strategy `deep`" do
result = perform_lookup("hdm_mixed_types2", merge_strategy: :deep)

assert_equal 23, result
end

private

def perform_lookup(key, merge_strategy:)
Expand Down

0 comments on commit 9e8b9dd

Please sign in to comment.