diff options
author | Lamont Granquist <lamont@scriptkiddie.org> | 2015-09-03 17:50:21 -0700 |
---|---|---|
committer | Lamont Granquist <lamont@scriptkiddie.org> | 2016-01-07 11:24:28 -0800 |
commit | d39f2cfb4208b55f054c346a417c7f8564dd2b29 (patch) | |
tree | 25997a152a055aa71b1276f692e5f97800a4d7e6 | |
parent | 73ce2f5c996b52bcfa9e58dce3ec14f43b9a0ece (diff) | |
download | chef-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.rb | 17 |
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 |