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