Class: Chef::Decorator::Unchain
- Inherits:
-
Object
- Object
- Chef::Decorator::Unchain
- Defined in:
- lib/chef/decorator/unchain.rb
Overview
This decorator unchains method call chains and turns them into method calls with variable args. So this:
node.set_unless["foo"]["bar"] = "baz"
Can become:
node.set_unless("foo", "bar", "baz")
While this is a decorator it is not a Decorator and does not inherit because it deliberately does not need or want the method_missing magic. It is not legal to call anything on the intermediate values and only supports method chaining with #[] until the chain comes to an end with #[]=, so does not behave like a hash or array… e.g.
node.default['foo'].keys is legal
node.set_unless['foo'].keys is not legal now or ever
Instance Attribute Summary collapse
-
#__method__ ⇒ Object
Returns the value of attribute __method__.
-
#__path__ ⇒ Object
Returns the value of attribute __path__.
Instance Method Summary collapse
- #[](key) ⇒ Object
- #[]=(key, value) ⇒ Object
-
#initialize(obj, method) ⇒ Unchain
constructor
A new instance of Unchain.
Constructor Details
#initialize(obj, method) ⇒ Unchain
Returns a new instance of Unchain.
26 27 28 29 30 |
# File 'lib/chef/decorator/unchain.rb', line 26 def initialize(obj, method) @__path__ = [] @__method__ = method @delegate_sd_obj = obj end |
Instance Attribute Details
#__method__ ⇒ Object
Returns the value of attribute __method__.
24 25 26 |
# File 'lib/chef/decorator/unchain.rb', line 24 def __method__ @__method__ end |
#__path__ ⇒ Object
Returns the value of attribute __path__.
23 24 25 |
# File 'lib/chef/decorator/unchain.rb', line 23 def __path__ @__path__ end |
Instance Method Details
#[](key) ⇒ Object
32 33 34 35 |
# File 'lib/chef/decorator/unchain.rb', line 32 def [](key) __path__.push(key) self end |
#[]=(key, value) ⇒ Object
37 38 39 40 |
# File 'lib/chef/decorator/unchain.rb', line 37 def []=(key, value) __path__.push(key) @delegate_sd_obj.public_send(__method__, *__path__, value) end |