Class: Sumac::RemoteObject
Instance Method Summary collapse
- #__remote_reference__ ⇒ Object
- #forget ⇒ Object
-
#initialize(connection, remote_reference) ⇒ RemoteObject
constructor
A new instance of RemoteObject.
- #inspect ⇒ Object
-
#method_missing(method_name, *arguments, &block) ⇒ Object
blocks not working yet.
Constructor Details
#initialize(connection, remote_reference) ⇒ RemoteObject
Returns a new instance of RemoteObject.
4 5 6 7 8 9 |
# File 'lib/sumac/remote_object.rb', line 4 def initialize(connection, remote_reference) raise "argument 'connection' must be a Connection" unless connection.is_a?(Connection) @connection = connection raise unless remote_reference.is_a?(RemoteReference) @remote_reference = remote_reference end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_name, *arguments, &block) ⇒ Object
blocks not working yet
11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/sumac/remote_object.rb', line 11 def method_missing(method_name, *arguments, &block) # blocks not working yet @connection.mutex.lock raise StaleObjectError unless @remote_reference.callable? begin arguments << block.to_lambda if block_given? return_value = @connection.call_dispatcher.make_call(self, method_name.to_s, arguments) rescue ClosedError raise StaleObjectError end return_value ensure @connection.mutex.unlock if @connection.mutex.owned? end |
Instance Method Details
#__remote_reference__ ⇒ Object
25 26 27 |
# File 'lib/sumac/remote_object.rb', line 25 def __remote_reference__ @remote_reference end |
#forget ⇒ Object
29 30 31 32 |
# File 'lib/sumac/remote_object.rb', line 29 def forget @connection.mutex.synchronize { @remote_reference.local_forget_request } nil end |
#inspect ⇒ Object
34 35 36 |
# File 'lib/sumac/remote_object.rb', line 34 def inspect "#<Sumac::RemoteObject:#{"0x00%x" % (object_id << 1)}>" end |