Sha256: 1fbeed451b79e63279268bb16d8f10684521020b7b518cd297e002077fff1515
Contents?: true
Size: 1.29 KB
Versions: 5
Compression:
Stored size: 1.29 KB
Contents
class Rack::App::FrontEnd::Middlewares::MethodOverride ALLOWED_METHODS = %w[GET POST].freeze METHOD_OVERRIDE_PARAM_KEY = "_method".freeze HTTP_METHOD_OVERRIDE_HEADER = "HTTP_X_HTTP_METHOD_OVERRIDE".freeze def initialize(app) @app = app end def call(env) if affected_request?(env) try_override(env) end @app.call(env) end protected def try_override(env) method = method_override(env) if valid_https_method?(method) set_request_method(method, env) end end def set_request_method(method, env) env[Rack::App::Constants::ENV::METHODOVERRIDE_ORIGINAL_METHOD] = env[Rack::REQUEST_METHOD] env[Rack::REQUEST_METHOD] = method end def valid_https_method?(method) Rack::App::Constants::HTTP::METHODS.include?(method) end def affected_request?(env) ALLOWED_METHODS.include?(env[Rack::REQUEST_METHOD]) end 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 def method_override_param(req, http_method) req.__send__(http_method)[METHOD_OVERRIDE_PARAM_KEY] rescue Rack::Utils::InvalidParameterError, Rack::Utils::ParameterTypeError end end
Version data entries
5 entries across 5 versions & 1 rubygems