lib/freddy/sync_response_container.rb in freddy-0.5.5 vs lib/freddy/sync_response_container.rb in freddy-0.5.6

- old
+ new

@@ -1,35 +1,34 @@ require 'thread' require 'timeout' class Freddy class SyncResponseContainer - def initialize + def initialize(on_timeout) @mutex = Mutex.new @resource = ConditionVariable.new + @on_timeout = on_timeout end def call(response, delivery) + if response.nil? + raise StandardError, 'unexpected nil value for response' + end + @response = response @delivery = delivery @mutex.synchronize { @resource.signal } end - def on_timeout(&block) - @on_timeout = block - end - def wait_for_response(timeout) - @mutex.synchronize { @resource.wait(@mutex, timeout) } + @mutex.synchronize { @response || @resource.wait(@mutex, timeout) } - if !defined?(@response) + if !@response @on_timeout.call raise TimeoutError.new( error: 'RequestTimeout', message: 'Timed out waiting for response' ) - elsif @response.nil? - raise StandardError, 'unexpected nil value for response' elsif !@delivery || @delivery.type == 'error' raise InvalidRequestError.new(@response) else @response end