diff options
author | Lamont Granquist <lamont@scriptkiddie.org> | 2016-09-23 16:47:45 -0700 |
---|---|---|
committer | Lamont Granquist <lamont@scriptkiddie.org> | 2016-10-25 09:29:29 -0700 |
commit | 69e92b100f4eccea6bf6f0953ffbc2e7f8b93b19 (patch) | |
tree | 95d04f36737b1075115b31ccb153a340b6a76928 /lib/chef/node/mixin/immutablize_hash.rb | |
parent | f1ee3c3ad99a39bcecc631ce411378b60ec878f8 (diff) | |
download | chef-69e92b100f4eccea6bf6f0953ffbc2e7f8b93b19.tar.gz |
add code to implement node path tracking
via node.__path variable
using __underscore format because node["path"] could very
well be used and we still have to deal with node.path method_missing
horribleness.
Signed-off-by: Lamont Granquist <lamont@scriptkiddie.org>
Diffstat (limited to 'lib/chef/node/mixin/immutablize_hash.rb')
-rw-r--r-- | lib/chef/node/mixin/immutablize_hash.rb | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/lib/chef/node/mixin/immutablize_hash.rb b/lib/chef/node/mixin/immutablize_hash.rb new file mode 100644 index 0000000000..f09e6944fc --- /dev/null +++ b/lib/chef/node/mixin/immutablize_hash.rb @@ -0,0 +1,54 @@ +#-- +# Copyright:: Copyright 2016, Chef Software, Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +class Chef + class Node + module Mixin + module ImmutablizeHash + DISALLOWED_MUTATOR_METHODS = [ + :[]=, + :clear, + :collect!, + :default=, + :default_proc=, + :delete, + :delete_if, + :keep_if, + :map!, + :merge!, + :update, + :reject!, + :replace, + :select!, + :shift, + :write, + :write!, + :unlink, + :unlink!, + ] + + # Redefine all of the methods that mutate a Hash to raise an error when called. + # This is the magic that makes this object "Immutable" + DISALLOWED_MUTATOR_METHODS.each do |mutator_method_name| + define_method(mutator_method_name) do |*args, &block| + raise Exceptions::ImmutableAttributeModification + end + end + end + end + end +end |