From a60168d0396b4907dfcfab9f78685c43e45b2efb Mon Sep 17 00:00:00 2001 From: Serdar Dogruyol Date: Fri, 26 Oct 2018 18:45:04 +0300 Subject: [PATCH] Add docs to Kemal::OverrideMethodHandler --- src/kemal/override_method_handler.cr | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/kemal/override_method_handler.cr b/src/kemal/override_method_handler.cr index 097dee9..523e9e6 100644 --- a/src/kemal/override_method_handler.cr +++ b/src/kemal/override_method_handler.cr @@ -1,4 +1,13 @@ module Kemal + # Adds support for `_method` magic parameter to simulate PUT, PATCH, DELETE requests in an html form. + # + # This middleware is **not** in the default Kemal handlers. You need to explicitly add this to your handlers: + # + # ```ruby + # add_handler Kemal::OverrideMethodHandler + # ``` + # + # **Important:** This middleware consumes `params.body` to read the `_method` magic parameter. class OverrideMethodHandler include HTTP::Handler INSTANCE = new @@ -10,14 +19,14 @@ module Kemal def call(context) request = context.request if request.method == OVERRIDE_METHOD - if context.params.body.has_key?(OVERRIDE_METHOD_PARAM_KEY) && override_method_valid?(context.params.body["_method"]) + if context.params.body.has_key?(OVERRIDE_METHOD_PARAM_KEY) && override_method_valid?(context.params.body[OVERRIDE_METHOD_PARAM_KEY]) request.method = context.params.body["_method"].upcase end end call_next(context) end - def override_method_valid?(override_method : String) + private def override_method_valid?(override_method : String) ALLOWED_METHODS.includes?(override_method.upcase) end end