Class: Rack::MethodOverride
| Relationships & Source Files | |
| Inherits: | Object |
| Defined in: | lib/rack/method_override.rb |
Constant Summary
-
ALLOWED_METHODS =
# File 'lib/rack/method_override.rb', line 17%w[POST] -
HTTP_METHODS =
# File 'lib/rack/method_override.rb', line 9%w[GET HEAD PUT POST DELETE OPTIONS PATCH LINK UNLINK QUERY] -
HTTP_METHOD_OVERRIDE_HEADER =
# File 'lib/rack/method_override.rb', line 16"HTTP_X_HTTP_METHOD_OVERRIDE" -
METHOD_OVERRIDE_PARAM_KEY =
# File 'lib/rack/method_override.rb', line 15"_method" -
PRIV_ALLOWED_METHODS =
private
# File 'lib/rack/method_override.rb', line 19ALLOWED_METHODS -
PRIV_HTTP_METHODS =
private
# File 'lib/rack/method_override.rb', line 11HTTP_METHODS
Class Method Summary
Instance Attribute Summary
- #allowed_methods readonly private
- #allowed_overrides readonly private
Instance Method Summary
Constructor Details
.new(app, allowed_methods: PRIV_ALLOWED_METHODS, allowed_overrides: PRIV_HTTP_METHODS) ⇒ MethodOverride
# 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