Sha256: 1863b62d83859348f407f6cce685ccad32529541aa255fca5c2526cfe22d8fe3
Contents?: true
Size: 907 Bytes
Versions: 1
Compression:
Stored size: 907 Bytes
Contents
require 'thread' require 'timeout' class Freddy class SyncResponseContainer def initialize @mutex = Mutex.new @resource = ConditionVariable.new end def call(response, delivery) @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) } if !defined?(@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 end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
freddy-0.5.5 | lib/freddy/sync_response_container.rb |