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