summary refs log tree commit
diff options
context:
space:
mode:
authorJon Crosby <jon@joncrosby.me>2009-01-05 17:44:36 -0800
committerChristian Neukirchen <chneukirchen@gmail.com>2009-01-06 12:35:41 +0100
commite908d263a6df76ddca237567c59e7a25e7ab6960 (patch)
treee0a8c662752a43535ca47229c29e6f3342f4b2f1
parentf981f3b2dba2b7a93cfb62f835b2fb89c252e7d3 (diff)
downloadrack-e908d263a6df76ddca237567c59e7a25e7ab6960.tar.gz
Store original HTTP method in MethodOverride middleware
-rw-r--r--lib/rack/methodoverride.rb1
-rw-r--r--test/spec_rack_methodoverride.rb10
2 files changed, 11 insertions, 0 deletions
diff --git a/lib/rack/methodoverride.rb b/lib/rack/methodoverride.rb
index 36a1d57f..0eed29f4 100644
--- a/lib/rack/methodoverride.rb
+++ b/lib/rack/methodoverride.rb
@@ -16,6 +16,7 @@ module Rack
           env[HTTP_METHOD_OVERRIDE_HEADER]
         method = method.to_s.upcase
         if HTTP_METHODS.include?(method)
+          env["rack.methodoverride.original_method"] = env["REQUEST_METHOD"]
           env["REQUEST_METHOD"] = method
         end
       end
diff --git a/test/spec_rack_methodoverride.rb b/test/spec_rack_methodoverride.rb
index ad7ab4e0..57452394 100644
--- a/test/spec_rack_methodoverride.rb
+++ b/test/spec_rack_methodoverride.rb
@@ -47,4 +47,14 @@ context "Rack::MethodOverride" do
 
     req.env["REQUEST_METHOD"].should.equal "POST"
   end
+
+  specify "should store the original REQUEST_METHOD prior to overriding" do
+    env = Rack::MockRequest.env_for("/",
+            :method => "POST",
+            :input  => "_method=options")
+    app = Rack::MethodOverride.new(lambda { |env| Rack::Request.new(env) })
+    req = app.call(env)
+
+    req.env["rack.methodoverride.original_method"].should.equal "POST"
+  end
 end