Sha256: a886c418deffe3b7910cf687a9feb567025d183478b12a886b82134b16fd17b5

Contents?: true

Size: 1.13 KB

Versions: 3

Compression:

Stored size: 1.13 KB

Contents

class Evil::Client::Operation
  require_relative "response_error"
  require_relative "unexpected_response_error"

  # Processes rack responses using an operation's schema
  class Response
    extend Dry::Initializer::Mixin
    param :schema

    # Processes rack responses returned by [Dry::Cluent::Connection]
    #
    # @param  [Array] array Rack-compatible array of response data
    # @return [Object]
    # @raise  [Evil::Client::ResponseError] if it is required by the schema
    #
    def handle(array)
      status, header, body = array
      response = Rack::Response.new(body, status, header)

      handler = response_schema(response)
      data    = handler[:coercer].call response: response,
                                       body:     response.body,
                                       header:   response.header

      handler[:raise] ? fail(ResponseError.new(schema, status, data)) : data
    end

    private

    def name
      @name ||= schema[:name]
    end

    def response_schema(response)
      schema[:responses].fetch response.status do
        fail UnexpectedResponseError.new(schema, response)
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
evil-client-0.2.3 lib/evil/client/operation/response.rb
evil-client-0.2.2 lib/evil/client/operation/response.rb
evil-client-0.2.1 lib/evil/client/operation/response.rb