# frozen_string_literal: true
require "rack"
module Hanami
class Action
# Rack SPEC response code
#
# @since 1.0.0
# @api private
RESPONSE_CODE = 0
# Rack SPEC response headers
#
# @since 1.0.0
# @api private
RESPONSE_HEADERS = 1
# Rack SPEC response body
#
# @since 1.0.0
# @api private
RESPONSE_BODY = 2
# @since 1.0.0
# @api private
DEFAULT_ERROR_CODE = 500
# Status codes that by RFC must not include a message body
#
# @since 0.3.2
# @api private
HTTP_STATUSES_WITHOUT_BODY = Set.new((100..199).to_a << 204 << 205 << 304).freeze
# Not Found
#
# @since 1.0.0
# @api private
NOT_FOUND = 404
# Entity headers allowed in blank body responses, according to
# RFC 2616 - Section 10 (HTTP 1.1).
#
# "The response MAY include new or updated metainformation in the form
# of entity-headers".
#
# @since 0.4.0
# @api private
#
# @see http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.5
# @see http://www.w3.org/Protocols/rfc2616/rfc2616-sec7.html
ENTITY_HEADERS = {
"Allow" => true,
"Content-Encoding" => true,
"Content-Language" => true,
"Content-Location" => true,
"Content-MD5" => true,
"Content-Range" => true,
"Expires" => true,
"Last-Modified" => true,
"extension-header" => true
}.freeze
# The request relative path
#
# @since 2.0.0
# @api private
PATH_INFO = ::Rack::PATH_INFO
# The request method
#
# @since 0.3.2
# @api private
REQUEST_METHOD = ::Rack::REQUEST_METHOD
# The Content-Length HTTP header
#
# @since 1.0.0
# @api private
CONTENT_LENGTH = ::Rack::CONTENT_LENGTH
# The non-standard HTTP header to pass the control over when a resource
# cannot be found by the current endpoint
#
# @since 1.0.0
# @api private
X_CASCADE = "X-Cascade"
# HEAD request
#
# @since 0.3.2
# @api private
HEAD = ::Rack::HEAD
# GET request
#
# @since 2.0.0
# @api private
GET = ::Rack::GET
# TRACE request
#
# @since 2.0.0
# @api private
TRACE = ::Rack::TRACE
# OPTIONS request
#
# @since 2.0.0
# @api private
OPTIONS = ::Rack::OPTIONS
# The key that returns accepted mime types from the Rack env
#
# @since 0.1.0
# @api private
HTTP_ACCEPT = "HTTP_ACCEPT"
# The header key to set the mime type of the response
#
# @since 0.1.0
# @api private
CONTENT_TYPE = ::Rack::CONTENT_TYPE
# The default mime type for an incoming HTTP request
#
# @since 0.1.0
# @api private
DEFAULT_ACCEPT = "*/*"
# The default mime type that is returned in the response
#
# @since 0.1.0
# @api private
DEFAULT_CONTENT_TYPE = "application/octet-stream"
# @since 0.2.0
# @api private
RACK_ERRORS = ::Rack::RACK_ERRORS
# The HTTP header for Cache-Control
#
# @since 2.0.0
# @api private
CACHE_CONTROL = ::Rack::CACHE_CONTROL
# @since 2.0.0
# @api private
IF_NONE_MATCH = "HTTP_IF_NONE_MATCH"
# The HTTP header for ETag
#
# @since 2.0.0
# @api private
ETAG = ::Rack::ETAG
# @since 2.0.0
# @api private
IF_MODIFIED_SINCE = "HTTP_IF_MODIFIED_SINCE"
# The HTTP header for Expires
#
# @since 2.0.0
# @api private
EXPIRES = ::Rack::EXPIRES
# The HTTP header for Last-Modified
#
# @since 0.3.0
# @api private
LAST_MODIFIED = "Last-Modified"
# This isn't part of Rack SPEC
#
# Exception notifiers use rack.exception instead of
# rack.errors, so we need to support it.
#
# @since 0.5.0
# @api private
#
# @see Hanami::Action::Throwable::RACK_ERRORS
# @see http://www.rubydoc.info/github/rack/rack/file/SPEC#The_Error_Stream
# @see https://github.com/hanami/controller/issues/133
RACK_EXCEPTION = "rack.exception"
# The HTTP header for redirects
#
# @since 0.2.0
# @api private
LOCATION = "Location"
# The key that returns Rack session params from the Rack env
# Please note that this is used only when an action is unit tested.
#
# @since 2.0.0
# @api private
#
# @example
# # action unit test
# action.call("rack.session" => { "foo" => "bar" })
# action.session[:foo] # => "bar"
#
# @api private
RACK_SESSION = ::Rack::RACK_SESSION
# @since 2.0.0
# @api private
REQUEST_ID = "hanami.request_id"
# @since 2.0.0
# @api private
DEFAULT_ID_LENGTH = 16
# The key that returns raw cookies from the Rack env
#
# @since 2.0.0
# @api private
HTTP_COOKIE = ::Rack::HTTP_COOKIE
# The key used by Rack to set the cookies as an Hash in the env
#
# @since 2.0.0
# @api private
COOKIE_HASH_KEY = ::Rack::RACK_REQUEST_COOKIE_HASH
# The key used by Rack to set the cookies as a String in the env
#
# @since 2.0.0
# @api private
COOKIE_STRING_KEY = ::Rack::RACK_REQUEST_COOKIE_STRING
# The key that returns raw input from the Rack env
#
# @since 2.0.0
# @api private
RACK_INPUT = ::Rack::RACK_INPUT
# The key that returns router params from the Rack env
# This is a builtin integration for Hanami::Router
#
# @since 2.0.0
# @api private
ROUTER_PARAMS = "router.params"
# Default HTTP request method for Rack env
#
# @since 2.0.0
# @api private
DEFAULT_REQUEST_METHOD = GET
# @since 2.0.0
# @api private
DEFAULT_CHARSET = "utf-8"
# The key that returns content mime type from the Rack env
#
# @since 2.0.0
# @api private
HTTP_CONTENT_TYPE = "CONTENT_TYPE"
end
end