Sha256: 3eb060593ff4d3ec975b895d33ce59e6975c080fd19a82c9bd18a83d66b2224e

Contents?: true

Size: 807 Bytes

Versions: 5

Compression:

Stored size: 807 Bytes

Contents

module PipeRpc
  class Client < BasicObject
    def initialize(hub, args = {})
      @hub = hub
      @server = args.fetch(:server, :default).to_sym
    end

    def method_missing(method, *args)
      backtrace = ::Kernel.respond_to?(:caller) ? ::Kernel.caller(1) : []

      @hub.request(server: @server, method: method, arguments: args) do |result|
        if result.is_a? ::StandardError
          result.set_backtrace(result.backtrace.to_a + backtrace.to_a) if result.respond_to? :set_backtrace
          ::Kernel.raise result
        else
          result
        end
      end
      # Method won't return until we got a result because @hub.request starts a loop and blocks!
    end

    def to_s
      "<Client:#{@server.to_s}>"
    end

    def is_a?(object)
      object == Client
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
pipe_rpc-0.3.2 lib/pipe_rpc/client.rb
pipe_rpc-0.3.1 lib/pipe_rpc/client.rb
pipe_rpc-0.3.0 lib/pipe_rpc/client.rb
pipe_rpc-0.2.2 lib/pipe_rpc/client.rb
pipe_rpc-0.2.0 lib/pipe_rpc/client.rb