summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2018-01-25 13:54:36 -0800
committerGitHub <noreply@github.com>2018-01-25 13:54:36 -0800
commita8db803dffa5d4b0667fb8862bad1c8538b8bef0 (patch)
treecd0841af833a7a49a37eb52a4abfa68b284f8b0f
parent378eaf9a32fe339f34da16f3bef44f2ef18ea16a (diff)
parente56f8d58b80334256085907961aac9ca9f56f125 (diff)
downloadchef-a8db803dffa5d4b0667fb8862bad1c8538b8bef0.tar.gz
Merge pull request #6790 from chef/lcg/fix-attr-assignment-to-attrs
fix node assignment of ImmutableArrays to VividMashes/AttrArrays
-rw-r--r--lib/chef/node/attribute_collections.rb2
-rw-r--r--lib/chef/node/mixin/state_tracking.rb2
-rw-r--r--spec/unit/node/attribute_spec.rb15
3 files changed, 18 insertions, 1 deletions
diff --git a/lib/chef/node/attribute_collections.rb b/lib/chef/node/attribute_collections.rb
index 6922bcf200..0271febea5 100644
--- a/lib/chef/node/attribute_collections.rb
+++ b/lib/chef/node/attribute_collections.rb
@@ -92,6 +92,7 @@ class Chef
private
def convert_value(value)
+ value.ensure_generated_cache! if value.respond_to?(:ensure_generated_cache!)
case value
when VividMash
value
@@ -189,6 +190,7 @@ class Chef
# AttrArray for consistency and to ensure that the added parts of the
# attribute tree will have the correct cache invalidation behavior.
def convert_value(value)
+ value.ensure_generated_cache! if value.respond_to?(:ensure_generated_cache!)
case value
when VividMash
value
diff --git a/lib/chef/node/mixin/state_tracking.rb b/lib/chef/node/mixin/state_tracking.rb
index 690d261df6..0c3d4c33a4 100644
--- a/lib/chef/node/mixin/state_tracking.rb
+++ b/lib/chef/node/mixin/state_tracking.rb
@@ -1,5 +1,5 @@
#--
-# Copyright:: Copyright 2016-2017, Chef Software Inc.
+# Copyright:: Copyright 2016-2018, Chef Software Inc.
# License:: Apache License, Version 2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/spec/unit/node/attribute_spec.rb b/spec/unit/node/attribute_spec.rb
index cbb9540486..42cdf2a9ce 100644
--- a/spec/unit/node/attribute_spec.rb
+++ b/spec/unit/node/attribute_spec.rb
@@ -1304,4 +1304,19 @@ describe Chef::Node::Attribute do
expect { @attributes["foo"]["bar"][0] << "buzz" }.to raise_error(RuntimeError, "can't modify frozen String")
end
end
+
+ describe "assigning lazy ungenerated caches to other attributes" do
+ it "works with arrays" do
+ @attributes.default["foo"]["baz"] = %w{one two}
+ @attributes.default["bar"]["baz"] = @attributes["foo"]["baz"]
+ expect(@attributes.default["bar"]["baz"]).to eql(%w{one two})
+ end
+
+ it "works with hashes" do
+ @attributes.default["foo"]["baz"] = { "one" => "two" }
+ @attributes.default["bar"]["baz"] = @attributes["foo"]["baz"]
+ expect(@attributes.default["bar"]["baz"]).to eql({ "one" => "two" })
+ end
+ end
+
end