diff options
author | Lamont Granquist <lamont@scriptkiddie.org> | 2021-01-11 21:48:08 -0800 |
---|---|---|
committer | Lamont Granquist <lamont@scriptkiddie.org> | 2021-01-15 09:37:44 -0800 |
commit | 38a6623583e34193adcc32f0e4d520f7a21be6a5 (patch) | |
tree | e5ba4f8d8f46434218e885287d4998cd5fa4093c | |
parent | 415e7fbbd5a4f6992e8941542effb3ba4800f36d (diff) | |
download | chef-38a6623583e34193adcc32f0e4d520f7a21be6a5.tar.gz |
lazy attribute support
Signed-off-by: Lamont Granquist <lamont@scriptkiddie.org>
-rw-r--r-- | lib/chef/node/immutable_collections.rb | 12 | ||||
-rw-r--r-- | lib/chef/node/mixin/deep_merge_cache.rb | 16 |
2 files changed, 21 insertions, 7 deletions
diff --git a/lib/chef/node/immutable_collections.rb b/lib/chef/node/immutable_collections.rb index 49dc0256b9..62bc0fba65 100644 --- a/lib/chef/node/immutable_collections.rb +++ b/lib/chef/node/immutable_collections.rb @@ -109,6 +109,12 @@ class Chef key end + def [](index) + value = super + value = value.call while value.is_a?(Proc) + value + end + prepend Chef::Node::Mixin::StateTracking prepend Chef::Node::Mixin::ImmutablizeArray end @@ -187,6 +193,12 @@ class Chef e end + def [](key) + value = super + value = value.call while value.is_a?(Proc) + value + end + prepend Chef::Node::Mixin::StateTracking prepend Chef::Node::Mixin::ImmutablizeHash end diff --git a/lib/chef/node/mixin/deep_merge_cache.rb b/lib/chef/node/mixin/deep_merge_cache.rb index e88e079895..c1c1d225d8 100644 --- a/lib/chef/node/mixin/deep_merge_cache.rb +++ b/lib/chef/node/mixin/deep_merge_cache.rb @@ -46,13 +46,15 @@ class Chef alias :reset :reset_cache def [](key) - if deep_merge_cache.key?(key.to_s) - # return the cache of the deep merged values by top-level key - deep_merge_cache[key.to_s] - else - # save all the work of computing node[key] - deep_merge_cache[key.to_s] = merged_attributes(key) - end + ret = if deep_merge_cache.key?(key.to_s) + # return the cache of the deep merged values by top-level key + deep_merge_cache[key.to_s] + else + # save all the work of computing node[key] + deep_merge_cache[key.to_s] = merged_attributes(key) + end + ret = ret.call while ret.is_a?(Proc) + ret end end |