class Freddy::SyncResponseContainer
Public Class Methods
Source
# File lib/freddy/sync_response_container.rb, line 7 def initialize(on_timeout) @mutex = Mutex.new @resource = ConditionVariable.new @on_timeout = on_timeout end
Public Instance Methods
Source
# File lib/freddy/sync_response_container.rb, line 13 def call(response, delivery) raise StandardError, 'unexpected nil value for response' if response.nil? @response = response @delivery = delivery @mutex.synchronize { @resource.signal } end
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, @response else @response end end