Class: IbRubyProxy::Client::CallbacksResponseHandler
- Inherits:
-
Object
- Object
- IbRubyProxy::Client::CallbacksResponseHandler
- Defined in:
- lib/ib_ruby_proxy/client/callbacks_response_handler.rb
Overview
This class maps callbacks with method invocations that originated them so that a block can be passed to the api method and it will be invoked when a callback is received
Defined Under Namespace
Classes: BlockCallbackHandler
Constant Summary collapse
- IB_CALLBACKS_MAPPING =
{ req_historical_ticks: { callbacks: %i[historical_ticks historical_ticks_bid_ask historical_ticks_last], discriminate_by_argument_nth: 0 }, req_contract_details: { callbacks: %i[contract_details contract_details_end], discriminate_by_argument_nth: 0 }, req_tick_by_tick_data: { callbacks: %i[tick_by_tick_bid_ask tick_by_tick_all_last tick_by_tick_mid_point], discriminate_by_argument_nth: 0 }, req_historical_data: { callbacks: %i[historical_data historical_data_end historical_data_update], discriminate_by_argument_nth: 0 } }.freeze
Class Method Summary collapse
Instance Method Summary collapse
-
#callback_received(callback_name, *arguments) ⇒ Object
Handle callback received: it will invoke the block passed in the corresponding #method_invoked, if any.
-
#configure_block_callback(method:, callbacks:, discriminate_by_argument_nth: nil) ⇒ Object
Configures a mapping between a method invocation and a received callback.
-
#initialize ⇒ CallbacksResponseHandler
constructor
A new instance of CallbacksResponseHandler.
-
#method_invoked(method_name, *arguments, &block) ⇒ Object
Handle invoked method.
Constructor Details
#initialize ⇒ CallbacksResponseHandler
Returns a new instance of CallbacksResponseHandler.
21 22 23 24 |
# File 'lib/ib_ruby_proxy/client/callbacks_response_handler.rb', line 21 def initialize @method_handlers = {} @callback_handlers = {} end |
Class Method Details
.for_ib ⇒ Object
47 48 49 50 51 52 53 54 55 56 |
# File 'lib/ib_ruby_proxy/client/callbacks_response_handler.rb', line 47 def self.for_ib new.tap do |handler| IbRubyProxy.config['mapped_callbacks'].each do |method, callback_config| nth_argument = callback_config['discriminate_by_argument_nth'] handler.configure_block_callback method: method.to_sym, callbacks: callback_config['callbacks'], discriminate_by_argument_nth: nth_argument end end end |
Instance Method Details
#callback_received(callback_name, *arguments) ⇒ Object
Handle callback received: it will invoke the block passed in the corresponding #method_invoked, if any.
41 42 43 44 |
# File 'lib/ib_ruby_proxy/client/callbacks_response_handler.rb', line 41 def callback_received(callback_name, *arguments) callback_name = callback_name.to_sym callback_handlers[callback_name]&.callback_received(callback_name, *arguments) end |
#configure_block_callback(method:, callbacks:, discriminate_by_argument_nth: nil) ⇒ Object
Configures a mapping between a method invocation and a received callback
65 66 67 68 69 70 71 72 |
# File 'lib/ib_ruby_proxy/client/callbacks_response_handler.rb', line 65 def configure_block_callback(method:, callbacks:, discriminate_by_argument_nth: nil) validate_can_add_callback_on_method!(method) handler = BlockCallbackHandler.new(discriminate_by_argument_nth) configure_callbacks_handler(callbacks, handler) configure_method_handler(method, handler) end |
#method_invoked(method_name, *arguments, &block) ⇒ Object
Handle invoked method
31 32 33 34 |
# File 'lib/ib_ruby_proxy/client/callbacks_response_handler.rb', line 31 def method_invoked(method_name, *arguments, &block) method_name = method_name.to_sym method_handlers[method_name]&.method_invoked(*arguments, &block) end |