summary refs log tree commit
diff options
context:
space:
mode:
authorRyan Tomayko <rtomayko@gmail.com>2008-12-18 19:25:24 -0800
committerRyan Tomayko <rtomayko@gmail.com>2008-12-18 19:25:24 -0800
commita697597aeb1a0e1590dc1ff7505c82d458ef5148 (patch)
tree360c1917c688d41d7504da46ffb15b5fb906ba58
parent5b60d28e922a662c9c5f30caed38e1a7d285e455 (diff)
downloadrack-a697597aeb1a0e1590dc1ff7505c82d458ef5148.tar.gz
Fix MethodOverride error when POST has no _method param
-rw-r--r--lib/rack/methodoverride.rb2
-rw-r--r--test/spec_rack_methodoverride.rb8
2 files changed, 9 insertions, 1 deletions
diff --git a/lib/rack/methodoverride.rb b/lib/rack/methodoverride.rb
index f17aa474..eb2f0a53 100644
--- a/lib/rack/methodoverride.rb
+++ b/lib/rack/methodoverride.rb
@@ -9,7 +9,7 @@ module Rack
     def call(env)
       if env["REQUEST_METHOD"] == "POST"
         req = Request.new(env)
-        method = req.POST["_method"].upcase
+        method = req.POST["_method"].to_s.upcase
         if HTTP_METHODS.include?(method)
           env["REQUEST_METHOD"] = method
         end
diff --git a/test/spec_rack_methodoverride.rb b/test/spec_rack_methodoverride.rb
index 3c5e99cf..ac0633e2 100644
--- a/test/spec_rack_methodoverride.rb
+++ b/test/spec_rack_methodoverride.rb
@@ -28,4 +28,12 @@ context "Rack::MethodOverride" do
 
     req.env["REQUEST_METHOD"].should.equal "POST"
   end
+
+  specify "should not modify REQUEST_METHOD when _method is nil" do
+    env = Rack::MockRequest.env_for("/", :method => "POST", :input => "foo=bar")
+    app = Rack::MethodOverride.new(lambda { |env| Rack::Request.new(env) })
+    req = app.call(env)
+
+    req.env["REQUEST_METHOD"].should.equal "POST"
+  end
 end