Object wrapping a reference to a remote drb object.
Method calls on this object are relayed to the remote object that this object is a stub for.
# File lib/drb/drb.rb, line 1050
def self._load(s)
  uri, ref = Marshal.load(s)
  if DRb.here?(uri)
    obj = DRb.to_obj(ref)
    return obj
  end
  self.new_with(uri, ref)
end Unmarshall a marshalled DRbObject.
If the referenced object is located within the local server, then the object itself is returned. Otherwise, a new DRbObject is created to act as a stub for the remote referenced object.
# File lib/drb/drb.rb, line 1088
def initialize(obj, uri=nil)
  @uri = nil
  @ref = nil
  case obj
  when Object
    is_nil = obj.nil?
  when BasicObject
    is_nil = false
  end
  if is_nil
    return if uri.nil?
    @uri, option = DRbProtocol.uri_option(uri, DRb.config)
    @ref = DRbURIOption.new(option) unless option.nil?
  else
    @uri = uri ? uri : (DRb.uri rescue nil)
    @ref = obj ? DRb.to_id(obj) : nil
  end
end Create a new remote object stub.
obj is the (local) object we want to create a stub for. Normally this is nil. uri is the URI of the remote object that this will be a stub for.
# File lib/drb/drb.rb, line 1064 def self.new_with(uri, ref) it = self.allocate it.instance_variable_set(:@uri, uri) it.instance_variable_set(:@ref, ref) it end
Creates a DRb::DRbObject given the reference information to the remote host uri and object ref.
# File lib/drb/drb.rb, line 1114 def __drbref @ref end
Get the reference of the object, if local.
# File lib/drb/drb.rb, line 1109 def __drburi @uri end
Get the URI of the remote object.
# File lib/drb/drb.rb, line 1079 def _dump(lv) Marshal.dump([@uri, @ref]) end
Marshall this object.
The URI and ref of the object are marshalled.
# File lib/drb/drb.rb, line 1134
               def method_missing(msg_id, *a, &b)
  if DRb.here?(@uri)
    obj = DRb.to_obj(@ref)
    DRb.current_server.check_insecure_method(obj, msg_id)
    return obj.__send__(msg_id, *a, &b)
  end
  succ, result = self.class.with_friend(@uri) do
    DRbConn.open(@uri) do |conn|
      conn.send_message(self, msg_id, a, b)
    end
  end
  if succ
    return result
  elsif DRbUnknown === result
    raise result
  else
    bt = self.class.prepare_backtrace(@uri, result)
    result.set_backtrace(bt + caller)
    raise result
  end
end # File lib/drb/drb.rb, line 1122
def respond_to?(msg_id, priv=false)
  case msg_id
  when :_dump
    true
  when :marshal_dump
    false
  else
    method_missing(:respond_to?, msg_id, priv)
  end
end Routes respond_to? to the referenced remote object.
    Ruby Core © 1993–2020 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.