summaryrefslogtreecommitdiff
path: root/lib/chef/node/mixin/immutablize_hash.rb
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2016-09-23 16:47:45 -0700
committerLamont Granquist <lamont@scriptkiddie.org>2016-10-25 09:29:29 -0700
commit69e92b100f4eccea6bf6f0953ffbc2e7f8b93b19 (patch)
tree95d04f36737b1075115b31ccb153a340b6a76928 /lib/chef/node/mixin/immutablize_hash.rb
parentf1ee3c3ad99a39bcecc631ce411378b60ec878f8 (diff)
downloadchef-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.rb54
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