class Rack::App::FrontEnd::Middlewares::MethodOverride

Constants

ALLOWED_METHODS
HTTP_METHOD_OVERRIDE_HEADER
METHOD_OVERRIDE_PARAM_KEY

Public Class Methods

new(app) click to toggle source
# File lib/rack/app/front_end/middlewares/method_override.rb, line 7
def initialize(app)
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/rack/app/front_end/middlewares/method_override.rb, line 11
def call(env)
  if affected_request?(env)
    try_override(env)
  end

  @app.call(env)
end

Protected Instance Methods

affected_request?(env) click to toggle source
# File lib/rack/app/front_end/middlewares/method_override.rb, line 37
def affected_request?(env)
  ALLOWED_METHODS.include?(env[Rack::REQUEST_METHOD])
end
method_override(env) click to toggle source
# File lib/rack/app/front_end/middlewares/method_override.rb, line 41
def method_override(env)
  req = Rack::Request.new(env)
  method = env[HTTP_METHOD_OVERRIDE_HEADER] ||
            method_override_param(req,:POST) ||
              method_override_param(req,:GET)

  method.to_s.upcase
end
method_override_param(req, http_method) click to toggle source
# File lib/rack/app/front_end/middlewares/method_override.rb, line 50
def method_override_param(req, http_method)
  req.__send__(http_method)[METHOD_OVERRIDE_PARAM_KEY]
rescue Rack::Utils::InvalidParameterError, Rack::Utils::ParameterTypeError
end
set_request_method(method, env) click to toggle source
# File lib/rack/app/front_end/middlewares/method_override.rb, line 28
def set_request_method(method, env)
  env[Rack::App::Constants::ENV::METHODOVERRIDE_ORIGINAL_METHOD] = env[Rack::REQUEST_METHOD]
  env[Rack::REQUEST_METHOD] = method
end
try_override(env) click to toggle source
# File lib/rack/app/front_end/middlewares/method_override.rb, line 21
def try_override(env)
  method = method_override(env)
  if valid_https_method?(method)
    set_request_method(method, env)
  end
end
valid_https_method?(method) click to toggle source
# File lib/rack/app/front_end/middlewares/method_override.rb, line 33
def valid_https_method?(method)
  Rack::App::Constants::HTTP::METHODS.include?(method)
end