Merged updates from trunk into stable branch
[feedcatcher.git] / vendor / rails / actionpack / lib / action_controller / vendor / rack-1.0 / rack / methodoverride.rb
1 module Rack
2 class MethodOverride
3 HTTP_METHODS = %w(GET HEAD PUT POST DELETE OPTIONS)
4
5 METHOD_OVERRIDE_PARAM_KEY = "_method".freeze
6 HTTP_METHOD_OVERRIDE_HEADER = "HTTP_X_HTTP_METHOD_OVERRIDE".freeze
7
8 def initialize(app)
9 @app = app
10 end
11
12 def call(env)
13 if env["REQUEST_METHOD"] == "POST"
14 req = Request.new(env)
15 method = req.POST[METHOD_OVERRIDE_PARAM_KEY] ||
16 env[HTTP_METHOD_OVERRIDE_HEADER]
17 method = method.to_s.upcase
18 if HTTP_METHODS.include?(method)
19 env["rack.methodoverride.original_method"] = env["REQUEST_METHOD"]
20 env["REQUEST_METHOD"] = method
21 end
22 end
23
24 @app.call(env)
25 end
26 end
27 end