summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordanielsdeleo <dan@opscode.com>2013-01-25 15:32:17 -0800
committerdanielsdeleo <dan@opscode.com>2013-01-25 15:32:17 -0800
commit1cf3a2815e3f244a866521a564531878e00b1e69 (patch)
treee976694b81abfab4685abb555e1ec95064fad9c0
parent0df84a5ccc41e4bca12990f0b4a708a24fc56d52 (diff)
downloadchef-1cf3a2815e3f244a866521a564531878e00b1e69.tar.gz
make merge between precedence overwrite arrays
-rw-r--r--lib/chef/node/attribute.rb6
-rw-r--r--spec/unit/node/attribute_spec.rb23
2 files changed, 26 insertions, 3 deletions
diff --git a/lib/chef/node/attribute.rb b/lib/chef/node/attribute.rb
index 9da96886a5..d8302cf18e 100644
--- a/lib/chef/node/attribute.rb
+++ b/lib/chef/node/attribute.rb
@@ -284,9 +284,9 @@ class Chef
def merged_attributes
@merged_attributes ||= begin
- resolved_attrs = COMPONENTS.inject(Mash.new) do |merged, component_ivar|
- component_value = instance_variable_get(component_ivar)
- Chef::Mixin::DeepMerge.merge(merged, component_value)
+ components = [combined_default, @normal, combined_override, @automatic]
+ resolved_attrs = components.inject(Mash.new) do |merged, component|
+ Chef::Mixin::DeepMerge.hash_only_merge(merged, component)
end
immutablize(resolved_attrs)
end
diff --git a/spec/unit/node/attribute_spec.rb b/spec/unit/node/attribute_spec.rb
index 947de76b1d..8c654679fe 100644
--- a/spec/unit/node/attribute_spec.rb
+++ b/spec/unit/node/attribute_spec.rb
@@ -284,6 +284,29 @@ describe Chef::Node::Attribute do
@attributes["override"].should == "cookbook override"
end
+ it "merges arrays within the default precedence" do
+ @attributes.role_default["array"] = %w{role}
+ @attributes.env_default["array"] = %w{env}
+ @attributes["array"].should == %w{env role}
+ end
+
+ it "merges arrays within the override precedence" do
+ @attributes.role_override["array"] = %w{role}
+ @attributes.env_override["array"] = %w{env}
+ @attributes["array"].should == %w{role env}
+ end
+
+ it "does not merge arrays between default and normal" do
+ @attributes.role_default["array"] = %w{role}
+ @attributes.normal["array"] = %w{normal}
+ @attributes["array"].should == %w{normal}
+ end
+
+ it "does not merge arrays between normal and override" do
+ @attributes.normal["array"] = %w{normal}
+ @attributes.role_override["array"] = %w{role}
+ @attributes["array"].should == %w{role}
+ end
end
describe "when reading combined default or override values" do