Class: Farcall::Interface

Inherits:
Object
  • Object
show all
Defined in:
lib/farcall/endpoint.rb

Overview

Interface to the remote provider via Farcall protocols. Works the same as the normal, local object, but slower. This interface is returned by Endpoint#remote. The Interface transparently creates methods as you call them to speed up subsequent calls.

There is no way to check that the remote responds to some method other than call it and catch the exception.

See RemoteError for more information on passing errors.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(endpoint: nil, transport: nil, provider: nil, **params) ⇒ Interface

Create interface connected to some endpoint ar transpost.

Please remember that Farcall::Transport instance could be used with only one connected object, unlike Farcall::Endpoint, which could be connected to several consumers.

Parameters:


330
331
332
333
334
335
336
337
# File 'lib/farcall/endpoint.rb', line 330

def initialize endpoint: nil, transport: nil, provider: nil, **params
  @endpoint = if endpoint
                endpoint
              else
                Farcall::Endpoint.new(transport || Farcall::Transport.create(**params))
              end
  provider and @endpoint.provider = provider
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *arguments, **kw_arguments, &block) ⇒ Object

used internally to synthesize the proxy method.


343
344
345
346
347
348
349
350
# File 'lib/farcall/endpoint.rb', line 343

def method_missing(method_name, *arguments, **kw_arguments, &block)
  instance_eval <<-End
    def #{method_name} *arguments, **kw_arguments
      @endpoint.sync_call '#{method_name}', *arguments, **kw_arguments
    end
  End
  @endpoint.sync_call method_name, *arguments, **kw_arguments
end

Instance Attribute Details

#endpointObject (readonly)

the Endpoint to which this interface is connected.


340
341
342
# File 'lib/farcall/endpoint.rb', line 340

def endpoint
  @endpoint
end

Instance Method Details

#respond_to_missing?(method_name, include_private = false) ⇒ Boolean

used internally to synthesize the proxy method.

Returns:

  • (Boolean)

353
354
355
# File 'lib/farcall/endpoint.rb', line 353

def respond_to_missing?(method_name, include_private = false)
  true
end