Class Object
In: lib/facets/core/facets/object/replace.rb
lib/facets/core/facets/object/dup.rb
lib/facets/core/facets/object/object_state.rb
Parent: Object

Methods

clone?   dup!   dup?   object_state   replace   try_dup  

Public Instance methods

[Source]

# File lib/facets/core/facets/object/dup.rb, line 23
  def clone? ; true ; end

Override this in a child class if it cannot be dup‘ed.

  obj1 = Object.new
  obj2 = obj1.dup!
  obj2.equal?(obj1)    #=> false

CREDIT: Dan Kubb (extlib)

[Source]

# File lib/facets/core/facets/object/dup.rb, line 9
  def dup!
    dup
  end

Can you safely call dup on this object?

Returns false for nil, false, true, symbols, and numbers; true otherwise.

[Source]

# File lib/facets/core/facets/object/dup.rb, line 22
  def dup?   ; true ; end

Get or set state of object. You can think of object_state as an in-code form of marshalling.

  class StateExample
    attr_reader :a, :b
    def initialize(a,b)
      @a, @b = a, b
    end
  end

  obj = StateExample.new(1,2)
  obj.a  #=> 1
  obj.b  #=> 2

  obj.object_state  #=> {:a=>1, :b=>2}

  obj.object_state(:a=>3, :b=>4)
  obj.a  #=> 3
  obj.b  #=> 4

For most object‘s this is essentially the same as instance.to_h. But for data structures like Array and Hash it returns a snapshot of their contents, not the state of their instance variables.

[Source]

# File lib/facets/core/facets/object/object_state.rb, line 28
  def object_state(data=nil)
    if data
      instance_variables.each do |iv|
        name = iv.to_s.sub(/^[@]/, '').to_sym
        instance_variable_set(iv, data[name])
      end
    else
      data = {}
      instance_variables.each do |iv|
        name = iv.to_s.sub(/^[@]/, '').to_sym
        data[name] = instance_variable_get(iv)
      end
      data
    end
  end

Replace state of object with the state of another object of the same class (or superclass).

  class ReplaceExample
    attr_reader :a, :b
    def initialize(a,b)
      @a, @b = a, b
    end
  end

  obj1 = ReplaceExample.new(1,2)
  obj1.a  #=> 1
  obj1.b  #=> 2

  obj2 = ReplaceExample.new(3,4)
  obj2.a  #=> 3
  obj2.b  #=> 4

  obj1.replace(obj2)
  obj1.a  #=> 3
  obj1.b  #=> 4

This is very similar to instance.update, but it is limited by the class of objects, in the same manner as Array#replace.

[Source]

# File lib/facets/core/facets/object/replace.rb, line 27
  def replace(source)
    raise ArgumentError, "not a #{self.class} -- #{source}" unless source.is_a?(self.class)
    instance_variables.each do |iv|
      instance_variable_set(iv, source.instance_variable_get(iv))
    end
  end

Alternative name for dup!

[Source]

# File lib/facets/core/facets/object/dup.rb, line 14
  def try_dup
    dup!
  end

[Validate]