Refactor debug view
Avoid logic in ERB and use helpers
This commit is contained in:
parent
cd77755ae4
commit
083f657c0f
@ -2,12 +2,40 @@
|
|||||||
require 'action_dispatch/middleware/exception_wrapper'
|
require 'action_dispatch/middleware/exception_wrapper'
|
||||||
require 'action_dispatch/routing/inspector'
|
require 'action_dispatch/routing/inspector'
|
||||||
|
|
||||||
|
require 'pp'
|
||||||
|
|
||||||
module ActionDispatch
|
module ActionDispatch
|
||||||
# This middleware is responsible for logging exceptions and
|
# This middleware is responsible for logging exceptions and
|
||||||
# showing a debugging page in case the request is local.
|
# showing a debugging page in case the request is local.
|
||||||
class DebugExceptions
|
class DebugExceptions
|
||||||
RESCUES_TEMPLATE_PATH = File.expand_path('../templates', __FILE__)
|
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)
|
def initialize(app, routes_app = nil)
|
||||||
@app = app
|
@app = app
|
||||||
@routes_app = routes_app
|
@routes_app = routes_app
|
||||||
@ -46,7 +74,7 @@ def render_exception(env, exception)
|
|||||||
source_to_show_id = source_to_show[:id]
|
source_to_show_id = source_to_show[:id]
|
||||||
end
|
end
|
||||||
|
|
||||||
template = ActionView::Base.new([RESCUES_TEMPLATE_PATH],
|
template = DebugView.new([RESCUES_TEMPLATE_PATH],
|
||||||
request: request,
|
request: request,
|
||||||
exception: wrapper.exception,
|
exception: wrapper.exception,
|
||||||
traces: traces,
|
traces: traces,
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
require 'action_controller/metal/exceptions'
|
require 'action_controller/metal/exceptions'
|
||||||
require 'active_support/core_ext/module/attribute_accessors'
|
require 'active_support/core_ext/module/attribute_accessors'
|
||||||
require 'pp'
|
|
||||||
|
|
||||||
module ActionDispatch
|
module ActionDispatch
|
||||||
class ExceptionWrapper
|
class ExceptionWrapper
|
||||||
|
@ -5,27 +5,8 @@
|
|||||||
<pre id="blame_trace" <%='style="display:none"' if hide %>><code><%= @exception.describe_blame %></code></pre>
|
<pre id="blame_trace" <%='style="display:none"' if hide %>><code><%= @exception.describe_blame %></code></pre>
|
||||||
<% end %>
|
<% 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>
|
<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="details">
|
||||||
<div class="summary"><a href="#" onclick="return toggleSessionDump()">Toggle session dump</a></div>
|
<div class="summary"><a href="#" onclick="return toggleSessionDump()">Toggle session dump</a></div>
|
||||||
@ -38,4 +19,4 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h2 style="margin-top: 30px">Response</h2>
|
<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)
|
assert_match(/RuntimeError\n\s+in FeaturedTileController/, body)
|
||||||
end
|
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
|
test "sets the HTTP charset parameter" do
|
||||||
@app = DevelopmentApp
|
@app = DevelopmentApp
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user