From 6d12d111f47d00a44d2527ccb4dc7bd71d8b4ba1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Wed, 18 Oct 2017 17:57:23 +0200 Subject: [PATCH] refactor Request#param_parser --- src/kemal/ext/request.cr | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/kemal/ext/request.cr diff --git a/src/kemal/ext/request.cr b/src/kemal/ext/request.cr new file mode 100644 index 0000000..035e736 --- /dev/null +++ b/src/kemal/ext/request.cr @@ -0,0 +1,36 @@ +class HTTP::Request + property override_method + property url_params : Hash(String, String)? + @param_parser : Kemal::ParamParser? + + def override_method + @override_method ||= check_for_method_override! + end + + def content_type + @headers["Content-Type"]? + end + + def param_parser + @param_parser ||= Kemal::ParamParser.new(self) + end + + # Checks if method contained in _method param is valid one + def self.override_method_valid?(override_method : String) + return false unless override_method.is_a?(String) + override_method = override_method.upcase + override_method == "PUT" || override_method == "PATCH" || override_method == "DELETE" + end + + # Checks if request params contain _method param to override request incoming method + private def check_for_method_override! + @override_method = @method + if @method == "POST" + params = param_parser.body + if params.has_key?("_method") && HTTP::Request.override_method_valid?(params["_method"]) + @override_method = params["_method"] + end + end + @override_method + end +end