diff options
author | danielsdeleo <dan@opscode.com> | 2013-01-25 17:14:32 -0800 |
---|---|---|
committer | danielsdeleo <dan@opscode.com> | 2013-01-25 17:14:32 -0800 |
commit | f71f535714c84b7106ed7620b6da85d2fadbd03c (patch) | |
tree | 68d4b6d29a514899c745fb242f8c0d7be05a235a /lib/chef/node | |
parent | 1cf3a2815e3f244a866521a564531878e00b1e69 (diff) | |
download | chef-f71f535714c84b7106ed7620b6da85d2fadbd03c.tar.gz |
fix errors when merging deeply nested values
Diffstat (limited to 'lib/chef/node')
-rw-r--r-- | lib/chef/node/attribute.rb | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/lib/chef/node/attribute.rb b/lib/chef/node/attribute.rb index d8302cf18e..eb6a0372d5 100644 --- a/lib/chef/node/attribute.rb +++ b/lib/chef/node/attribute.rb @@ -284,7 +284,7 @@ class Chef def merged_attributes @merged_attributes ||= begin - components = [combined_default, @normal, combined_override, @automatic] + components = [merge_defaults, @normal, merge_overrides, @automatic] resolved_attrs = components.inject(Mash.new) do |merged, component| Chef::Mixin::DeepMerge.hash_only_merge(merged, component) end @@ -293,23 +293,11 @@ class Chef end def combined_override - @combined_override ||= begin - resolved_attrs = OVERRIDE_COMPONENTS.inject(Mash.new) do |merged, component_ivar| - component_value = instance_variable_get(component_ivar) - Chef::Mixin::DeepMerge.merge(merged, component_value) - end - immutablize(resolved_attrs) - end + @combined_override ||= immutablize(merge_overrides) end def combined_default - @combined_default ||= begin - resolved_attrs = DEFAULT_COMPONENTS.inject(Mash.new) do |merged, component_ivar| - component_value = instance_variable_get(component_ivar) - Chef::Mixin::DeepMerge.merge(merged, component_value) - end - immutablize(resolved_attrs) - end + @combined_default ||= immutablize(merge_defaults) end def [](key) @@ -358,6 +346,23 @@ class Chef @set_unless_present end + private + + def merge_defaults + DEFAULT_COMPONENTS.inject(Mash.new) do |merged, component_ivar| + component_value = instance_variable_get(component_ivar) + Chef::Mixin::DeepMerge.merge(merged, component_value) + end + end + + def merge_overrides + OVERRIDE_COMPONENTS.inject(Mash.new) do |merged, component_ivar| + component_value = instance_variable_get(component_ivar) + Chef::Mixin::DeepMerge.merge(merged, component_value) + end + end + + end end |