aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2005-04-18 14:15:26 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2005-04-18 14:15:26 +0000
commite9681eb9c5bd29f555d56bb9842f1d561334a21e (patch)
tree8d1900e0a8e0e0c9491d540e7f255ead8b2addd6
parenta37b8b33d4d5da6a671205551bf4473cea2a4692 (diff)
downloadrails-e9681eb9c5bd29f555d56bb9842f1d561334a21e.tar.gz
rails-e9681eb9c5bd29f555d56bb9842f1d561334a21e.tar.bz2
rails-e9681eb9c5bd29f555d56bb9842f1d561334a21e.zip
Added graceful handling of PUT, DELETE, and OPTIONS requests for a complete coverage of REST functionality #1136 [joshknowles@gmail.com]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1208 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
-rw-r--r--actionpack/CHANGELOG2
-rw-r--r--actionpack/lib/action_controller/cgi_ext/raw_post_data_fix.rb10
-rw-r--r--railties/lib/webrick_server.rb6
3 files changed, 7 insertions, 11 deletions
diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG
index e571a2cc87..f4b2327ec0 100644
--- a/actionpack/CHANGELOG
+++ b/actionpack/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Added graceful handling of PUT, DELETE, and OPTIONS requests for a complete coverage of REST functionality #1136 [joshknowles@gmail.com]
+
* Fixed that you can now pass an alternative :href option to link_to_function/remote in order to point to somewhere other than # if the javascript fails or is turned off. You can do the same with form_remote_tag by passing in :action. #1113 [Sam Stephenson]
* Added Request#xml_http_request? (and an alias xhr?) to that'll return true when the request came from one of the Javascript helper methods (Ajax). This can be used to give one behavior for modern browsers supporting Ajax, another to old browsers #1127 [Sam Stephenson]
diff --git a/actionpack/lib/action_controller/cgi_ext/raw_post_data_fix.rb b/actionpack/lib/action_controller/cgi_ext/raw_post_data_fix.rb
index 7b3465c4a8..d6dbbd737f 100644
--- a/actionpack/lib/action_controller/cgi_ext/raw_post_data_fix.rb
+++ b/actionpack/lib/action_controller/cgi_ext/raw_post_data_fix.rb
@@ -28,13 +28,9 @@ class CGI #:nodoc:
def read_query_params
case env_table['REQUEST_METHOD']
- when 'GET', 'HEAD'
- if defined? MOD_RUBY
- Apache::request.args || ''
- else
- env_table['QUERY_STRING'] || ''
- end
- when 'POST'
+ when 'GET', 'HEAD', 'DELETE', 'OPTIONS'
+ (defined?(MOD_RUBY) ? Apache::request.args : env_table['QUERY_STRING']) || ''
+ when 'POST', 'PUT'
stdinput.binmode if stdinput.respond_to?(:binmode)
content = stdinput.read(Integer(env_table['CONTENT_LENGTH'])) || ''
env_table['RAW_POST_DATA'] = content.split("&_").first.to_s.freeze # &_ is a fix for Safari Ajax postings that always append \000
diff --git a/railties/lib/webrick_server.rb b/railties/lib/webrick_server.rb
index 43acffab86..dee7713a6b 100644
--- a/railties/lib/webrick_server.rb
+++ b/railties/lib/webrick_server.rb
@@ -28,7 +28,7 @@ class DispatchServlet < WEBrick::HTTPServlet::AbstractServlet
super
end
- def do_GET(req, res)
+ def service(req, res)
begin
unless handle_file(req, res)
REQUEST_MUTEX.lock
@@ -41,12 +41,10 @@ class DispatchServlet < WEBrick::HTTPServlet::AbstractServlet
end
end
- alias :do_POST :do_GET
-
def handle_file(req, res)
begin
add_dot_html(req)
- @file_handler.send(:do_GET, req, res)
+ @file_handler.send(:service, req, res)
remove_dot_html(req)
return true
rescue HTTPStatus::PartialContent, HTTPStatus::NotModified => err