Method: Rack::ShowStatus#call

Defined in:
lib/rack/show_status.rb

#call(env) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/rack/show_status.rb', line 24

def call(env)
  status, headers, body = response = @app.call(env)
  empty = headers[CONTENT_LENGTH].to_i <= 0

  # client or server error, or explicit message
  if (status.to_i >= 400 && empty) || env[RACK_SHOWSTATUS_DETAIL]
    # This double assignment is to prevent an "unused variable" warning.
    # Yes, it is dumb, but I don't like Ruby yelling at me.
    req = req = Rack::Request.new(env)

    message = Rack::Utils::HTTP_STATUS_CODES[status.to_i] || status.to_s

    # This double assignment is to prevent an "unused variable" warning.
    # Yes, it is dumb, but I don't like Ruby yelling at me.
    detail = detail = env[RACK_SHOWSTATUS_DETAIL] || message

    html = @template.result(binding)
    size = html.bytesize

    response[2] = Rack::BodyProxy.new([html]) do
      body.close if body.respond_to?(:close)
    end

    headers[CONTENT_TYPE] = "text/html"
    headers[CONTENT_LENGTH] = size.to_s
  end

  response
end