class Rack::ShowStatus
Rack::ShowStatus catches all empty responses and replaces them with a site explaining the error.
Additional details can be put into rack.showstatus.detail
and
will be shown as HTML. If such details exist, the error page is always
rendered, even if the reply was not empty.
Public Class Methods
new(app)
click to toggle source
# File lib/rack/show_status.rb, line 13 def initialize(app) @app = app @template = ERB.new(TEMPLATE) end
Public Instance Methods
call(env)
click to toggle source
# File lib/rack/show_status.rb, line 18 def call(env) status, headers, body = @app.call(env) headers = Utils::HeaderHash[headers] 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 body = @template.result(binding) size = body.bytesize [status, headers.merge(CONTENT_TYPE => "text/html", CONTENT_LENGTH => size.to_s), [body]] else [status, headers, body] end end