Bug #7714 » ruby-doc_drb-20130117.patch
| lib/drb/drb.rb | ||
|---|---|---|
|
# An exception wrapping an error object
|
||
|
class DRbRemoteError < DRbError
|
||
|
# Create a new DRb::DRbRemoteError
|
||
|
def initialize(error)
|
||
|
@reason = error.class.to_s
|
||
|
super("#{error.message} (#{error.class})")
|
||
| ... | ... | |
|
end
|
||
|
end
|
||
|
# Class to wrap an Array.
|
||
|
#
|
||
|
# === Description
|
||
|
#
|
||
|
# A DRbArray can be provided in a DRb call. When the marshalled value
|
||
|
# of a DRbArray object is unmarshalled, it returns the wrapped Array.
|
||
|
#
|
||
|
#
|
||
|
# === Examples
|
||
|
#
|
||
|
# a = %w{ cats and dogs }
|
||
|
# => ["cats", "and", "dogs"]
|
||
|
# da = DRb::DRbArray.new(a)
|
||
|
# => #<DRb::DRbArray:0x0000000068b0f0 @ary=["cats", "and", "dogs"]>
|
||
|
# bin = Marshal.dump(h)
|
||
|
# => "\x04\bu:\x12DRb::DRbArray*\x04\b[\bI\"\tcats\x06:\x06ETI\"\band\x06;\0TI\"\tdogs\x06;\0T"
|
||
|
# Marshal.load(bin)
|
||
|
# => ["cats", "and", "dogs"]
|
||
|
#
|
||
|
class DRbArray
|
||
|
# Create a DRb::DRbArray object
|
||
|
#
|
||
|
# +ary+ is an Array
|
||
|
def initialize(ary)
|
||
|
@ary = ary.collect { |obj|
|
||
|
if obj.kind_of? DRbUndumped
|
||
| ... | ... | |
|
}
|
||
|
end
|
||
|
def self._load(s)
|
||
|
def self._load(s) # :nodoc:
|
||
|
Marshal::load(s)
|
||
|
end
|
||
|
def _dump(lv)
|
||
|
def _dump(lv) # :nodoc:
|
||
|
Marshal.dump(@ary)
|
||
|
end
|
||
|
end
|
||
| ... | ... | |
|
end
|
||
|
private
|
||
|
def make_proxy(obj, error=false)
|
||
|
def make_proxy(obj, error=false) # :nodoc:
|
||
|
if error
|
||
|
DRbRemoteError.new(obj)
|
||
|
else
|
||
| ... | ... | |
|
self.new_with(uri, ref)
|
||
|
end
|
||
|
# Create a DRb::DRbObject given the reference information to the
|
||
|
# remote host uri String, and ref
|
||
|
def self.new_with(uri, ref)
|
||
|
it = self.allocate
|
||
|
it.instance_variable_set(:@uri, uri)
|
||
| ... | ... | |
|
# Set the default acl.
|
||
|
#
|
||
|
# See DRb::DRbServer.default_acl.
|
||
|
# XXX needs more info
|
||
|
def install_acl(acl)
|
||
|
DRbServer.default_acl(acl)
|
||
|
end
|
||
|
module_function :install_acl
|
||
|
@mutex = Mutex.new
|
||
|
# Get the semaphore for this DRb module
|
||
|
#
|
||
|
# return's a Mutex instance
|
||
|
def mutex
|
||
|
@mutex
|
||
|
end
|
||
|
module_function :mutex
|
||
|
@server = {}
|
||
|
# Recored the DRb::DRbServer +server+
|
||
|
#
|
||
|
# This is called when a new DRb::DRbServer instance is created.
|
||
|
#
|
||
|
# require 'drb'
|
||
|
#
|
||
|
# s = DRb::DRbServer.new
|
||
|
# => #<DRb::DRbServer:0x00000001dcb440 @config={:idconv=>#<DRb::...
|
||
|
# DRb.fetch_server(s.uri)
|
||
|
# => #<DRb::DRbServer:0x00000001dcb440 @config={:idconv=>#<DRb::...
|
||
|
#
|
||
|
def regist_server(server)
|
||
|
@server[server.uri] = server
|
||
|
mutex.synchronize do
|
||
| ... | ... | |
|
end
|
||
|
module_function :regist_server
|
||
|
# Remove the DRb::DRbServer +server+ from the registered list
|
||
|
def remove_server(server)
|
||
|
@server.delete(server.uri)
|
||
|
end
|
||
|
module_function :remove_server
|
||
|
# Return the DRb::DRbServer object, provided the String +uri+.
|
||
|
#
|
||
|
# This is provided from the registered servers.
|
||
|
# See also #regist_server and #remove_server
|
||
|
def fetch_server(uri)
|
||
|
@server[uri]
|
||
|
end
|
||