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 |