Module: Collapsium::RecursiveDup

Included in:
UberHash
Defined in:
lib/collapsium/recursive_dup.rb

Overview

Provides recursive (deep) dup function for hashes.

Instance Method Summary collapse

Instance Method Details

#recursive_dupObject Also known as: deep_dup



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/collapsium/recursive_dup.rb', line 14

def recursive_dup
  ret = map do |k, v|
    # Hash values, recurse into them.
    if v.is_a?(Hash)
      n = v.dup # we duplicate v to not extend it.
      n.extend(RecursiveDup)
      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
  return Hash[ret]
end