class DRb::DRbUnknown

attribute.
name attribute. The marshalled object is held in the buf
The class or constant name of the object can be read from the
drb, then the wrapped object is passed instead.
If this object is passed as an argument to a method invoked over
the still-marshalled object is returned wrapped in a DRbUnknown instance.
the object is a constant unknown in the client namespace, then
class of the object is unknown in the client namespace, or
If an object is returned by a method invoked over drb, but the
Class wrapping a marshalled object whose type is unknown locally.

def self._load(s) # :nodoc:

:nodoc:
def self._load(s) # :nodoc:
  begin
    Marshal::load(s)
  rescue NameError, ArgumentError
    DRbUnknown.new($!, s)
  end
end

def _dump(lv) # :nodoc:

:nodoc:
def _dump(lv) # :nodoc:
  @buf
end

def exception

Create a DRbUnknownError exception containing this object.
def exception
  DRbUnknownError.new(self)
end

def initialize(err, buf)

name of the unmarshalled object.
when the unmarshalling failed. It is used to determine the
be unmarshalled. +err+ is the error message that was raised
+buf+ is a string containing a marshalled object that could not

Create a new DRbUnknown object.
def initialize(err, buf)
  case err.to_s
  when /uninitialized constant (\S+)/
    @name = $1
  when /undefined class\/module (\S+)/
    @name = $1
  else
    @name = nil
  end
  @buf = buf
end

def reload

but identical DRbUnknown object will be returned.
will be unmarshalled and returned. Otherwise, a new
If the class of the object is now known locally, the object

Attempt to load the wrapped marshalled object again.
def reload
  self.class._load(@buf)
end