Module: Collapsium::RecursiveDup

Extended by:
ViralCapabilities
Included in:
EnvironmentOverride, UberHash
Defined in:
lib/collapsium/recursive_dup.rb

Overview

Provides recursive (deep) dup function for hashes.

Constant Summary

Constants included from ViralCapabilities

ViralCapabilities::DEFAULT_ANCESTORS, ViralCapabilities::ENHANCED_MARKER, ViralCapabilities::READ_METHODS, ViralCapabilities::WRITE_METHODS

Constants included from Support::Methods

Support::Methods::BUILTINS, Support::Methods::WRAPPER_HASH

Instance Method Summary collapse

Methods included from ViralCapabilities

call_virality, copy_mods, enhance, enhance_array_value, enhance_hash_value, enhance_value, extended, extended, included, included, prepended, prepended, set_ancestors

Methods included from Support::Methods

builtins, loop_detected?, repeated, #resolve_helpers, #wrap_method, wrappers

Instance Method Details

#recursive_dupObject Also known as: deep_dup



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/collapsium/recursive_dup.rb', line 19

def recursive_dup
  ret = map do |k, v|
    # Hash values, recurse into them.
    if v.is_a?(Hash)
      n = ViralCapabilities.enhance_hash_value(self, v)
      next [k, n.recursive_dup]
    end

    begin
      # Other duplicatable values
      next [k, v.dup]
    rescue TypeError
      # Values such as e.g. Fixnum
      next [k, v]
    end
  end
  ret = Hash[ret]
  return ViralCapabilities.enhance_hash_value(self, ret)
end