aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2015-07-09 14:56:26 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2015-07-09 14:56:38 -0700
commiteb10496a1c3d9fe58b91aa0ec17d9f218738d5dc (patch)
tree9baf5b72e81908f66edb8548fcc9bd775c982465 /actionpack
parentd37f01b9315719e813a86739bbbb6d67c620f6ea (diff)
downloadrails-eb10496a1c3d9fe58b91aa0ec17d9f218738d5dc.tar.gz
rails-eb10496a1c3d9fe58b91aa0ec17d9f218738d5dc.tar.bz2
rails-eb10496a1c3d9fe58b91aa0ec17d9f218738d5dc.zip
drop runtime conditionals in parameter parsing
If we only deal with proc objects, then we can eliminate type checking in the parameter parsing middleware
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/lib/action_dispatch/middleware/params_parser.rb22
1 files changed, 9 insertions, 13 deletions
diff --git a/actionpack/lib/action_dispatch/middleware/params_parser.rb b/actionpack/lib/action_dispatch/middleware/params_parser.rb
index 29d43faeed..3776aa78ed 100644
--- a/actionpack/lib/action_dispatch/middleware/params_parser.rb
+++ b/actionpack/lib/action_dispatch/middleware/params_parser.rb
@@ -13,7 +13,13 @@ module ActionDispatch
end
end
- DEFAULT_PARSERS = { Mime::JSON => :json }
+ DEFAULT_PARSERS = {
+ Mime::JSON => lambda { |raw_post|
+ data = ActiveSupport::JSON.decode(raw_post)
+ data = {:_json => data} unless data.is_a?(Hash)
+ Request::Utils.deep_munge(data).with_indifferent_access
+ }
+ }
def initialize(app, parsers = {})
@app, @parsers = app, DEFAULT_PARSERS.merge(parsers)
@@ -33,20 +39,10 @@ module ActionDispatch
return false if request.content_length.zero?
- strategy = @parsers[request.content_mime_type]
+ strategy = @parsers.fetch(request.content_mime_type) { return false }
- return false unless strategy
+ strategy.call(request.raw_post)
- case strategy
- when Proc
- strategy.call(request.raw_post)
- when :json
- data = ActiveSupport::JSON.decode(request.raw_post)
- data = {:_json => data} unless data.is_a?(Hash)
- Request::Utils.deep_munge(data).with_indifferent_access
- else
- false
- end
rescue => e # JSON or Ruby code block errors
logger(env).debug "Error occurred while parsing request parameters.\nContents:\n\n#{request.raw_post}"