123456789_123456789_123456789_123456789_123456789_

Class: Rack::MethodOverride

Relationships & Source Files
Inherits: Object
Defined in: lib/rack/method_override.rb

Constant Summary

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(app, allowed_methods: PRIV_ALLOWED_METHODS, allowed_overrides: PRIV_HTTP_METHODS) ⇒ MethodOverride

[ GitHub ]

  
# File 'lib/rack/method_override.rb', line 23

def initialize(app, allowed_methods: PRIV_ALLOWED_METHODS, allowed_overrides: PRIV_HTTP_METHODS)
  @app = app
  @allowed_methods = allowed_methods
  @allowed_overrides = allowed_overrides
end

Instance Attribute Details

#allowed_methods (readonly, private)

[ GitHub ]

  
# File 'lib/rack/method_override.rb', line 54

attr_reader :allowed_methods, :allowed_overrides

#allowed_overrides (readonly, private)

[ GitHub ]

  
# File 'lib/rack/method_override.rb', line 54

attr_reader :allowed_methods, :allowed_overrides

Instance Method Details

#call(env)

[ GitHub ]

  
# File 'lib/rack/method_override.rb', line 29

def call(env)
  if allowed_methods.include?(env[REQUEST_METHOD])
    method = method_override(env)
    if allowed_overrides.include?(method)
      env[RACK_METHODOVERRIDE_ORIGINAL_METHOD] = env[REQUEST_METHOD]
      env[REQUEST_METHOD] = method
    end
  end

  @app.call(env)
end

#method_override(env)

[ GitHub ]

  
# File 'lib/rack/method_override.rb', line 41

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

#method_override_param(req) (private)

[ GitHub ]

  
# File 'lib/rack/method_override.rb', line 56

def method_override_param(req)
  req.POST[METHOD_OVERRIDE_PARAM_KEY] if req.form_data? || req.parseable_data?
rescue Utils::InvalidParameterError, Utils::ParameterTypeError, QueryParser::ParamsTooDeepError, QueryParser::IncompatibleEncodingError
  req.get_header(RACK_ERRORS).puts "Invalid or incomplete POST params"
rescue EOFError
  req.get_header(RACK_ERRORS).puts "Bad request content body"
end