Sha256: 8f8211ce7f48315207ef582fc8e58470e2be30a5e20b333e014b1c47498fe2ee

Contents?: true

Size: 881 Bytes

Versions: 18

Compression:

Stored size: 881 Bytes

Contents

require 'timeout'

class Freddy
  class SyncResponseContainer
    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 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
  end
end

Version data entries

18 entries across 18 versions & 2 rubygems

Version Path
freddy-1.4.1 lib/freddy/sync_response_container.rb
freddy-1.4.0 lib/freddy/sync_response_container.rb
freddy-1.3.3 lib/freddy/sync_response_container.rb
freddy-jruby-1.3.2 lib/freddy/sync_response_container.rb
freddy-1.3.2 lib/freddy/sync_response_container.rb
freddy-1.3.1 lib/freddy/sync_response_container.rb
freddy-1.3.0 lib/freddy/sync_response_container.rb
freddy-1.2.0 lib/freddy/sync_response_container.rb
freddy-1.1.0 lib/freddy/sync_response_container.rb
freddy-1.0.1 lib/freddy/sync_response_container.rb
freddy-jruby-1.0.0 lib/freddy/sync_response_container.rb
freddy-1.0.0 lib/freddy/sync_response_container.rb
freddy-jruby-0.7.2 lib/freddy/sync_response_container.rb
freddy-0.7.2 lib/freddy/sync_response_container.rb
freddy-0.7.1 lib/freddy/sync_response_container.rb
freddy-0.7.0 lib/freddy/sync_response_container.rb
freddy-0.6.3 lib/freddy/sync_response_container.rb
freddy-0.6.2 lib/freddy/sync_response_container.rb