提交 083f657c 编写于 作者: K Kir Shatrov

Refactor debug view

Avoid logic in ERB and use helpers
上级 cd77755a
......@@ -2,12 +2,40 @@
require 'action_dispatch/middleware/exception_wrapper'
require 'action_dispatch/routing/inspector'
require 'pp'
module ActionDispatch
# This middleware is responsible for logging exceptions and
# showing a debugging page in case the request is local.
class DebugExceptions
RESCUES_TEMPLATE_PATH = File.expand_path('../templates', __FILE__)
class DebugView < ActionView::Base
def debug_params(params)
clean_params = params.clone
clean_params.delete("action")
clean_params.delete("controller")
if clean_params.empty?
'None'
else
PP.pp(clean_params, "", 200)
end
end
def debug_headers(headers)
if headers.present?
headers.inspect.gsub(',', ",\n")
else
'None'
end
end
def debug_hash(object)
object.to_hash.sort_by { |k, _| k.to_s }.map { |k, v| "#{k}: #{v.inspect rescue $!.message}" }.join("\n")
end
end
def initialize(app, routes_app = nil)
@app = app
@routes_app = routes_app
......@@ -46,7 +74,7 @@ def render_exception(env, exception)
source_to_show_id = source_to_show[:id]
end
template = ActionView::Base.new([RESCUES_TEMPLATE_PATH],
template = DebugView.new([RESCUES_TEMPLATE_PATH],
request: request,
exception: wrapper.exception,
traces: traces,
......
require 'action_controller/metal/exceptions'
require 'active_support/core_ext/module/attribute_accessors'
require 'pp'
module ActionDispatch
class ExceptionWrapper
......
......@@ -5,27 +5,8 @@
<pre id="blame_trace" <%='style="display:none"' if hide %>><code><%= @exception.describe_blame %></code></pre>
<% end %>
<%
clean_params = @request.filtered_parameters.clone
clean_params.delete("action")
clean_params.delete("controller")
request_dump = if clean_params.empty?
'None'
else
pretty_params = ""
PP.pp(clean_params, pretty_params, 200)
pretty_params
end
def debug_hash(object)
object.to_hash.sort_by { |k, _| k.to_s }.map { |k, v| "#{k}: #{v.inspect rescue $!.message}" }.join("\n")
end unless self.class.method_defined?(:debug_hash)
%>
<h2 style="margin-top: 30px">Request</h2>
<p><b>Parameters</b>:</p> <pre><%= request_dump %></pre>
<p><b>Parameters</b>:</p> <pre><%= debug_params(@request.filtered_parameters) %></pre>
<div class="details">
<div class="summary"><a href="#" onclick="return toggleSessionDump()">Toggle session dump</a></div>
......@@ -38,4 +19,4 @@
</div>
<h2 style="margin-top: 30px">Response</h2>
<p><b>Headers</b>:</p> <pre><%= defined?(@response) ? @response.headers.inspect.gsub(',', ",\n") : 'None' %></pre>
<p><b>Headers</b>:</p> <pre><%= debug_headers(defined?(@response) ? @response.headers : {}) %></pre>
......@@ -241,6 +241,29 @@ def setup
assert_match(/RuntimeError\n\s+in FeaturedTileController/, body)
end
test "show formatted params" do
@app = DevelopmentApp
params = {
'id' => 'unknown',
'someparam' => {
'foo' => 'bar',
'abc' => 'goo'
}
}
get("/runtime_error", {}, {
'action_dispatch.show_exceptions' => true,
'action_dispatch.request.parameters' => {
'action' => 'show',
'controller' => 'featured_tile'
}.merge(params)
})
assert_response 500
assert_includes(body, CGI.escapeHTML(PP.pp(params, "", 200)))
end
test "sets the HTTP charset parameter" do
@app = DevelopmentApp
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册