Method: Object#deep_copy

Defined in:
lib/atome/extensions/atome.rb

#deep_copy(obj) ⇒ Object



115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/atome/extensions/atome.rb', line 115

def deep_copy(obj)
  # utility for buttons
  case obj
  when Hash
    obj.each_with_object({}) do |(k, v), h|
      unless k == :code # exception to avoid Proc accumulation
        h[deep_copy(k)] = deep_copy(v)
      end
    end
  when Array
    obj.map { |e| deep_copy(e) }
  else
    obj.dup rescue obj
  end
end