From 24b13acd428d50c077d913d6f308842377eddf62 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 20 May 2005 18:32:04 +0000 Subject: [PATCH] Made the post_format work with content-type git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1336 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/CHANGELOG | 10 +++++----- actionpack/lib/action_controller/cgi_process.rb | 4 ++-- actionpack/lib/action_controller/request.rb | 10 ++++++++-- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index dc6395aefd..924017f0d0 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -18,14 +18,14 @@ * Added accessors to logger, params, response, session, flash, and headers from the view, so you can write <% logger.info "stuff" %> instead of <% @logger.info "others" %> -- more consistent with the preferred way of accessing these attributes and collections from the controller -* Added support for POST data in form of YAML or XML, which is controller through the X-POST_DATA_MARSHAL header. Example request: +* Added support for POST data in form of YAML or XML, which is controller through the Content-Type header. Example request: - X-POST_DATA_MARSHAL: xml + Content-Type: application/xml HelloWorld ...is the same as: - X-POST_DATA_MARSHAL: yaml + Content-Type: application/x-yaml --- item: content: HelloWorld @@ -38,10 +38,10 @@ Example Curl call: - curl -H 'X-POST_DATA_MARSHAL: xml' -d 'KillMeMore' http://www.example.com/service + curl -H 'Content-Type: application/xml' -d 'KillMeMore' http://www.example.com/service You can query to find out whether a given request came through as one of these types with: - - request.post_format? (:query_string, :xml or :yaml) + - request.post_format? (:url_encoded, :xml or :yaml) - request.formatted_post? (for either xml or yaml) - request.xml_post? - request.yaml_post? diff --git a/actionpack/lib/action_controller/cgi_process.rb b/actionpack/lib/action_controller/cgi_process.rb index ba9235ef81..9166a8d433 100644 --- a/actionpack/lib/action_controller/cgi_process.rb +++ b/actionpack/lib/action_controller/cgi_process.rb @@ -63,8 +63,8 @@ module ActionController #:nodoc: end def request_parameters - if env['HTTP_X_POST_DATA_FORMAT'] - CGIMethods.parse_formatted_request_parameters(env['HTTP_X_POST_DATA_FORMAT'].downcase.intern, env['RAW_POST_DATA']) + if formatted_post? + CGIMethods.parse_formatted_request_parameters(post_format, env['RAW_POST_DATA']) else CGIMethods.parse_request_parameters(@cgi.params) end diff --git a/actionpack/lib/action_controller/request.rb b/actionpack/lib/action_controller/request.rb index 02682b57cf..214edf250e 100755 --- a/actionpack/lib/action_controller/request.rb +++ b/actionpack/lib/action_controller/request.rb @@ -3,7 +3,6 @@ module ActionController class AbstractRequest # Returns both GET and POST parameters in a single hash. def parameters - # puts "#{request_parameters.inspect} | #{query_parameters.inspect} | #{path_parameters.inspect}" @parameters ||= request_parameters.merge(query_parameters).merge(path_parameters).with_indifferent_access end @@ -36,7 +35,14 @@ module ActionController if env['HTTP_X_POST_DATA_FORMAT'] env['HTTP_X_POST_DATA_FORMAT'].downcase.intern else - :query_string + case env['HTTP_CONTENT_TYPE'] + when 'application/xml', 'text/xml' + :xml + when 'application/x-yaml', 'text/x-yaml' + :yaml + else + :url_encoded + end end end