class IbRubyProxy::Client::CallbacksResponseHandler::BlockCallbackHandler

b_proxy_service.rb:13@private

Attributes

block[R]
discriminate_by_argument_nth[R]

Public Class Methods

new(discriminate_by_argument_nth) click to toggle source
# File lib/ib_ruby_proxy/client/callbacks_response_handler.rb, line 99
def initialize(discriminate_by_argument_nth)
  @discriminate_by_argument_nth = discriminate_by_argument_nth
  @blocks_by_discriminator = {}
end

Public Instance Methods

callback_received(callback_name, *arguments) click to toggle source
# File lib/ib_ruby_proxy/client/callbacks_response_handler.rb, line 119
def callback_received(callback_name, *arguments)
  if callback_name.to_s == 'error'
    raise StandardError, arguments.join('. ')
  else
    block = if @discriminate_by_argument_nth
              @blocks_by_discriminator[arguments[@discriminate_by_argument_nth]]
            else
              @block
            end

    block&.call(callback_name, *arguments)
  end
end
method_invoked(*arguments, &block) click to toggle source
# File lib/ib_ruby_proxy/client/callbacks_response_handler.rb, line 104
def method_invoked(*arguments, &block)
  if @discriminate_by_argument_nth
    discrminator = arguments[@discriminate_by_argument_nth]
    unless discrminator
      raise "No argument #{@discriminate_by_argument_nth} to discriminate with?"\
            " #{arguments.inspect}"
    end

    @blocks_by_discriminator[discrminator] = block
  else
    @block = block
  end
  nil
end