class Rack::MethodOverride

Constants

ALLOWED_METHODS
HTTP_METHODS
HTTP_METHOD_OVERRIDE_HEADER
METHOD_OVERRIDE_PARAM_KEY

Public Class Methods

# File lib/rack/method_override.rb, line 15
def initialize(app)
  @app = app
end

Public Instance Methods

# File lib/rack/method_override.rb, line 19
def call(env)
  if allowed_methods.include?(env[REQUEST_METHOD])
    method = method_override(env)
    if HTTP_METHODS.include?(method)
      env[RACK_METHODOVERRIDE_ORIGINAL_METHOD] = env[REQUEST_METHOD]
      env[REQUEST_METHOD] = method
    end
  end

  @app.call(env)
end
# File lib/rack/method_override.rb, line 31
def method_override(env)
  req = Request.new(env)
  method = method_override_param(req) ||
    env[HTTP_METHOD_OVERRIDE_HEADER]
  begin
    method.to_s.upcase
  rescue ArgumentError
    env[RACK_ERRORS].puts "Invalid string for method"
  end
end