summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2015-09-03 17:50:21 -0700
committerLamont Granquist <lamont@scriptkiddie.org>2016-01-07 11:24:28 -0800
commitd39f2cfb4208b55f054c346a417c7f8564dd2b29 (patch)
tree25997a152a055aa71b1276f692e5f97800a4d7e6
parent73ce2f5c996b52bcfa9e58dce3ec14f43b9a0ece (diff)
downloadchef-d39f2cfb4208b55f054c346a417c7f8564dd2b29.tar.gz
deep merge cache debugging
- unwraps the object coming out of the deep merge cache so its not a mash - handle some edge conditions better
-rw-r--r--lib/chef/node/attribute_trait/deep_merge_cache.rb17
1 files changed, 10 insertions, 7 deletions
diff --git a/lib/chef/node/attribute_trait/deep_merge_cache.rb b/lib/chef/node/attribute_trait/deep_merge_cache.rb
index 83aec07c23..53b169d62c 100644
--- a/lib/chef/node/attribute_trait/deep_merge_cache.rb
+++ b/lib/chef/node/attribute_trait/deep_merge_cache.rb
@@ -68,14 +68,17 @@ class Chef
def [](key)
if is_a?(Chef::Node::Attribute)
- cache = __deep_merge_cache.regular_reader(*__path)
-
- cache_val = cache && cache[key] && cache[key][:__deep_merge_cache]
- return cache_val if cache_val
+ cache_val = __deep_merge_cache.regular_reader(*__path, key, :__deep_merge_cache) rescue nil
+ if cache_val
+ return cache_val.respond_to?(:wrapped_object) ? cache_val.wrapped_object : cache_val
+ end
+ cache = __deep_merge_cache.regular_reader(*__path) rescue nil
val = super
- cache.regular_writer(key, {}) unless cache.include?(key)
- cache[key].regular_writer(:__deep_merge_cache, val)
+ if cache
+ cache.regular_writer(key, {}) unless cache.include?(key)
+ cache[key].regular_writer(:__deep_merge_cache, val)
+ end
return val
else
super
@@ -86,7 +89,7 @@ class Chef
if is_a?(Chef::Node::VividMash)
# FIXME: should probably add some kind of safe_regular_reader that doesn't rescue Exceptions
cache = __deep_merge_cache.regular_reader(*__path) rescue nil
- if cache && cache[key] && cache[key][:__deep_merge_cache]
+ if cache && cache[key] && cache[key].key?(:__deep_merge_cache)
cache[key].delete(:__deep_merge_cache)
end
end