def method_missing(method_name, *arguments, &block)  # TODO: blocks not working yet
      arguments << block.to_lambda if block_given?
      reqeust = {object: self, method: method_name.to_s, arguments: arguments}
      begin
        return_value = @object_request_broker.call(reqeust)
      rescue ClosedObjectRequestBrokerError
        raise StaleObjectError
      end
    end
def method_missing(method_name, *arguments, &block)  # TODO: blocks not working yet
      arguments << block.to_lambda if block_given?
      reqeust = {object: self, method: method_name.to_s, arguments: arguments}
      begin
        return_value = @object_request_broker.call(reqeust)
      rescue ClosedObjectRequestBrokerError
        raise StaleObjectError
      end
    end
Makes a calls to the object on the remote endpoint.
 @note will block until the call has completed
 @param method_name [String] method to call
 @param arguments [Array<Array,Boolean,Exception,ExposedObject,Float,Hash,Integer,nil,String>] arguments being passed
 @raise [ClosedObjectRequestBrokerError] if broker is closed before the request is sent or respose is received
 @raise [UnexposedObjectError] if an object being sent is an invalid type
 @raise [StaleObjectError] if an object being sent has been forgoten by this endpoint
   (may not be forgoten by the remote endpoint yet)
 @raise [RemoteError] if an error was raised during call
 @raise [ArgumentError,StaleObjectError,UnexposedMethodError,UnexposedObjectError]
   if one is raised by the remote endpoint when trying to call the method or return a value (but not during the call)
 @return [Array,Boolean,Exception,ExposedObject,Float,Hash,Integer,nil,String] value returned from the call on remote endpoint