diff options
Diffstat (limited to 'lib/rack/showexceptions.rb')
-rw-r--r-- | lib/rack/showexceptions.rb | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/lib/rack/showexceptions.rb b/lib/rack/showexceptions.rb index c91ca07c..731aea49 100644 --- a/lib/rack/showexceptions.rb +++ b/lib/rack/showexceptions.rb @@ -28,23 +28,32 @@ module Rack env["rack.errors"].puts(exception_string) env["rack.errors"].flush - if prefers_plain_text?(env) - content_type = "text/plain" - body = [exception_string] - else + if accepts_html?(env) content_type = "text/html" body = pretty(env, e) + else + content_type = "text/plain" + body = exception_string end - [500, - {"Content-Type" => content_type, - "Content-Length" => Rack::Utils.bytesize(body.join).to_s}, - body] + [ + 500, + { + "Content-Type" => content_type, + "Content-Length" => Rack::Utils.bytesize(body).to_s, + }, + [body], + ] + end + + def prefers_plaintext?(env) + !accepts_html(env) end - def prefers_plain_text?(env) - env["HTTP_X_REQUESTED_WITH"] == "XMLHttpRequest" && (!env["HTTP_ACCEPT"] || !env["HTTP_ACCEPT"].include?("text/html")) + def accepts_html?(env) + Rack::Utils.best_q_match(env["HTTP_ACCEPT"], %w[text/html]) end + private :accepts_html? def dump_exception(exception) string = "#{exception.class}: #{exception.message}\n" @@ -85,7 +94,7 @@ module Rack end }.compact - [@template.result(binding)] + @template.result(binding) end def h(obj) # :nodoc: |