Sha256: 7a3d94ae1072f3a0c25fb33c6f560200f9fa445c12a3bc7ac4174a32c294e966

Contents?: true

Size: 1.01 KB

Versions: 1

Compression:

Stored size: 1.01 KB

Contents

# encoding: utf-8

module Hyperdrive
  class Response
    attr_reader :resource, :env, :http_request_method, :headers

    def initialize(env, resource)
      @resource = resource
      @env = env
      @http_request_method = env['REQUEST_METHOD']

      unless request_method_supported?
        raise Errors::NotImplemented.new(http_request_method)
      end

      unless resource.request_method_allowed?(http_request_method)
        raise Errors::MethodNotAllowed.new(http_request_method)
      end

      @headers = default_headers
    end

    def response
      @headers.merge({ 'Content-Type' => 'text/plain' })
      status = (http_request_method == 'POST') ? 201 : 200
      ::Rack::Response.new(resource.request_handler(http_request_method).call(env), status, headers).finish
    end

    private

    def default_headers
      {
        'Allow' => resource.allowed_methods
      }
    end

    def request_method_supported?
      Hyperdrive::Values.request_methods_string_map.key?(http_request_method)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
hyperdrive-0.0.4 lib/hyperdrive/response.rb