Skip to content
Kward Search API index

Module: Kward::DeepCopy

Defined in:
lib/kward/deep_copy.rb

Overview

Small recursive copy/freeze helpers for plain Hash/Array payload objects.

Class Method Summary collapse

Class Method Details

.dup(value) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/kward/deep_copy.rb', line 7

def dup(value)
  case value
  when Hash
    value.each_with_object({}) { |(key, item), result| result[key] = dup(item) }
  when Array
    value.map { |item| dup(item) }
  else
    value.dup
  end
rescue TypeError
  value
end

.freeze(value) ⇒ Object



20
21
22
23
24
25
26
27
28
# File 'lib/kward/deep_copy.rb', line 20

def freeze(value)
  case value
  when Hash
    value.each_value { |item| freeze(item) }
  when Array
    value.each { |item| freeze(item) }
  end
  value.freeze
end

.merge(left, right) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
# File 'lib/kward/deep_copy.rb', line 30

def merge(left, right)
  left = dup(left)
  right.each do |key, value|
    left[key] = if left[key].is_a?(Hash) && value.is_a?(Hash)
                  merge(left[key], value)
                else
                  dup(value)
                end
  end
  left
end