aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2005-05-20 18:32:04 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2005-05-20 18:32:04 +0000
commit24b13acd428d50c077d913d6f308842377eddf62 (patch)
tree2c64084ca6673399cf50678d02e03a98fa53c3ce /actionpack
parent8cc64e77cf0e7b25fbcb9f19c2c640410a62cb89 (diff)
downloadrails-24b13acd428d50c077d913d6f308842377eddf62.tar.gz
rails-24b13acd428d50c077d913d6f308842377eddf62.tar.bz2
rails-24b13acd428d50c077d913d6f308842377eddf62.zip
Made the post_format work with content-type
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1336 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/CHANGELOG10
-rw-r--r--actionpack/lib/action_controller/cgi_process.rb4
-rwxr-xr-xactionpack/lib/action_controller/request.rb10
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
<request><item><content>HelloWorld</content></item></request>
...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 '<request><item><content>KillMeMore</content></item></request>' http://www.example.com/service
+ curl -H 'Content-Type: application/xml' -d '<request><item><content>KillMeMore</content></item></request>' 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