Sha256: b2adc33031ccc19abdfdd45b13086c7dddce07eff393cd4b148f7fe3444c416b

Contents?: true

Size: 882 Bytes

Versions: 10

Compression:

Stored size: 882 Bytes

Contents

class Evil::Client
  #
  # Resolves rack-compatible response from schema for given settings
  # @private
  #
  class Resolver::Response < Resolver
    private

    PROCESSING_DONE = Object.new
    SKIP_RESPONSE   = Object.new

    def initialize(schema, settings, response)
      @__response__ = Array response
      super schema, settings, :responses, @__response__.first.to_i
    end

    def __call__
      super do
        catch(PROCESSING_DONE) do
          __blocks__.reverse_each do |block|
            catch(SKIP_RESPONSE) do
              throw(PROCESSING_DONE, instance_exec(*@__response__, &block))
            end
          end
          # We're here if 1) no blocks or 2) all blocks skipped processing
          raise ResponseError.new(@__schema__, @__settings__, @__response__)
        end
      end
    end

    def super!
      throw SKIP_RESPONSE
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
evil-client-3.3.0 lib/evil/client/resolver/response.rb
evil-client-3.2.0 lib/evil/client/resolver/response.rb
evil-client-3.1.0 lib/evil/client/resolver/response.rb
evil-client-3.0.4 lib/evil/client/resolver/response.rb
evil-client-3.0.3 lib/evil/client/resolver/response.rb
evil-client-3.0.2 lib/evil/client/resolver/response.rb
evil-client-3.0.1 lib/evil/client/resolver/response.rb
evil-client-3.0.0 lib/evil/client/resolver/response.rb
evil-client-2.1.1 lib/evil/client/resolver/response.rb
evil-client-2.1.0 lib/evil/client/resolver/response.rb