class Freddy::SyncResponseContainer
Public Class Methods
new(on_timeout)
click to toggle source
# File lib/freddy/sync_response_container.rb, line 5 def initialize(on_timeout) @mutex = Mutex.new @resource = ConditionVariable.new @on_timeout = on_timeout end
Public Instance Methods
call(response, delivery)
click to toggle source
# File lib/freddy/sync_response_container.rb, line 11 def call(response, delivery) if response.nil? raise StandardError, 'unexpected nil value for response' end @response = response @delivery = delivery @mutex.synchronize { @resource.signal } end
wait_for_response(timeout)
click to toggle source
# File lib/freddy/sync_response_container.rb, line 21 def wait_for_response(timeout) @mutex.synchronize { @response || @resource.wait(@mutex, timeout) } if !@response @on_timeout.call raise TimeoutError.new( error: 'RequestTimeout', message: 'Timed out waiting for response' ) elsif !@delivery || @delivery.type == 'error' raise InvalidRequestError.new(@response) else @response end end