Module: Mixlib::CLI::InheritMethods
- Defined in:
- lib/mixlib/cli.rb
Instance Method Summary collapse
-
#deep_dup(object) ⇒ Object
- object
Instance to clone This method will return a "deep clone" of the provided
object.
- #inherited(receiver) ⇒ Object
Instance Method Details
#deep_dup(object) ⇒ Object
- object
Instance to clone
This method will return a "deep clone" of the provided
object. If the provided object is an enumerable type the
contents will be iterated and cloned as well.
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/mixlib/cli.rb', line 53 def deep_dup(object) cloned_object = object.respond_to?(:dup) ? object.dup : object if cloned_object.is_a?(Enumerable) if cloned_object.is_a?(Hash) new_hash = cloned_object.class.new cloned_object.each do |key, value| cloned_key = deep_dup(key) cloned_value = deep_dup(value) new_hash[cloned_key] = cloned_value end cloned_object.replace(new_hash) else cloned_object.map! do |shallow_instance| deep_dup(shallow_instance) end end end cloned_object rescue TypeError # Symbol will happily provide a `#dup` method even though # attempts to clone it will result in an exception (atoms!). # So if we run into an issue of TypeErrors, just return the # original object as we gave our "best effort" object end |
#inherited(receiver) ⇒ Object
44 45 46 47 |
# File 'lib/mixlib/cli.rb', line 44 def inherited(receiver) receiver. = deep_dup() receiver.extend(Mixlib::CLI::InheritMethods) end |