class Rack::Lint::Wrapper

def response

def response
  ## It takes exactly one argument, the *environment*
  raise LintError, "No env given" unless @env
  check_environment(@env)
  @env[RACK_INPUT] = InputWrapper.new(@env[RACK_INPUT])
  @env[RACK_ERRORS] = ErrorWrapper.new(@env[RACK_ERRORS])
  ## and returns a non-frozen Array of exactly three values:
  @response = @app.call(@env)
  raise LintError, "response is not an Array, but #{@response.class}" unless @response.kind_of? Array
  raise LintError, "response is frozen" if @response.frozen?
  raise LintError, "response array has #{@response.size} elements instead of 3" unless @response.size == 3
  @status, @headers, @body = @response
  ## The *status*,
  check_status(@status)
  ## the *headers*,
  check_headers(@headers)
  hijack_proc = check_hijack_response(@headers, @env)
  if hijack_proc
    @headers[RACK_HIJACK] = hijack_proc
  end
  ## and the *body*.
  check_content_type(@status, @headers)
  check_content_length(@status, @headers)
  @head_request = @env[REQUEST_METHOD] == HEAD
  @lint = (@env['rack.lint'] ||= []) << self
  if (@env['rack.lint.body_iteration'] ||= 0) > 0
    raise LintError, "Middleware must not call #each directly"
  end
  return [@status, @headers, self]
end