File tree Expand file tree Collapse file tree 3 files changed +23
-2
lines changed
Expand file tree Collapse file tree 3 files changed +23
-2
lines changed Original file line number Diff line number Diff line change @@ -3,6 +3,13 @@ class ActionControllerError < StandardError #:nodoc:
33 end
44
55 class BadRequest < ActionControllerError #:nodoc:
6+ attr_reader :original_exception
7+
8+ def initialize ( type , e )
9+ super ( "Invalid #{ type } parameters: #{ e . message } " )
10+ @original_exception = e
11+ set_backtrace e . backtrace
12+ end
613 end
714
815 class RenderError < ActionControllerError #:nodoc:
Original file line number Diff line number Diff line change @@ -253,15 +253,15 @@ def session_options=(options)
253253 def GET
254254 @env [ "action_dispatch.request.query_parameters" ] ||= ( normalize_parameters ( super ) || { } )
255255 rescue TypeError => e
256- raise ActionController ::BadRequest , "Invalid query parameters: #{ e . message } " , e . backtrace
256+ raise ActionController ::BadRequest . new ( :query , e )
257257 end
258258 alias :query_parameters :GET
259259
260260 # Override Rack's POST method to support indifferent access
261261 def POST
262262 @env [ "action_dispatch.request.request_parameters" ] ||= ( normalize_parameters ( super ) || { } )
263263 rescue TypeError => e
264- raise ActionController ::BadRequest , "Invalid request parameters: #{ e . message } " , e . backtrace
264+ raise ActionController ::BadRequest . new ( :request , e )
265265 end
266266 alias :request_parameters :POST
267267
Original file line number Diff line number Diff line change @@ -560,6 +560,20 @@ def url_for(options = {})
560560 assert_equal ( { } , request . parameters )
561561 end
562562
563+ test "we have access to the original exception" do
564+ mock_rack_env = { "QUERY_STRING" => "x[y]=1&x[y][][w]=2" , "rack.input" => "foo" }
565+ request = nil
566+ request = stub_request ( mock_rack_env )
567+
568+ e = assert_raises ( ActionController ::BadRequest ) do
569+ # rack will raise a TypeError when parsing this query string
570+ request . parameters
571+ end
572+
573+ assert e . original_exception
574+ assert_equal e . original_exception . backtrace , e . backtrace
575+ end
576+
563577 test "formats with accept header" do
564578 request = stub_request 'HTTP_ACCEPT' => 'text/html'
565579 request . expects ( :parameters ) . at_least_once . returns ( { } )
You can’t perform that action at this time.
0 commit comments