class Couchbase::Model::DeepCopier
Attributes
source[R]
Public Class Methods
new(source)
click to toggle source
# File lib/couchbase/model/deep_copier.rb, line 5 def initialize(source) @source = source end
Public Instance Methods
copy()
click to toggle source
# File lib/couchbase/model/deep_copier.rb, line 9 def copy if cloneable? if complex? deep_copy else source.clone end else source end end
Private Instance Methods
cloneable?()
click to toggle source
# File lib/couchbase/model/deep_copier.rb, line 22 def cloneable? source.duplicable? end
complex?()
click to toggle source
# File lib/couchbase/model/deep_copier.rb, line 26 def complex? [Array, Hash].include? source.class end
deep_copy()
click to toggle source
# File lib/couchbase/model/deep_copier.rb, line 30 def deep_copy shallow = source.clone if source.is_a?(Array) shallow.clear shallow.concat source.map {|value| DeepCopier.new(value).copy } elsif source.is_a?(Hash) source.each {|key, value| shallow[key] = DeepCopier.new(value).copy } shallow else raise ArgumentError.new("Deep copying a #{source.class} is not supported.") end end