Module: Cloneable

Module | Cloneable
In: | lib/more/facets/cloneable.rb

# Clonable

Standard basis for adding deep dup and clone to a class. Provides a class with deep cloneablity via the standard dup and clone methods.

### Methods

initialize_copy

### Public Instance methods

initialize_copy(sibling)

[Source]

    # File lib/more/facets/cloneable.rb, line 40
      def initialize_copy(sibling)
        #first duplicate my superclass' state. Note that if it's duplicating
        #instance variables, this will be overwritten, but this is important
        #because we could be dealing with a C extension with state hidden from
        #the Ruby interpreter
        super

        #we want to know if we're being dup'ed or clone'd, because we want to
        #preserve the state of our internals the same way our state is being
        #preserved. (If we can't figure it out, we'll just use #dup.)
        operation=caller.find{|x| x !~ /'initialize_copy'/}.
          match(/`(dup|clone)'/)[1] or :dup

        sibling.instance_variables.each do |ivar|
          value = sibling.instance_variable_get(ivar)

          #set my instance variable to be a #dup or #clone
          #or my sibling, depending on what's happening to me right now
          instance_variable_set(ivar, value.send(operation))
        end
      end

[Validate]