From 043d1c8aa26ed510b491b6859b60cb29d8c43ddb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fatih=20Kadir=20Ak=C4=B1n?= Date: Sun, 6 Mar 2016 22:39:10 +0200 Subject: [PATCH] Add memoization to lazy param parsing --- src/kemal/context.cr | 1 - src/kemal/param_parser.cr | 7 +++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/kemal/context.cr b/src/kemal/context.cr index f744236..333e752 100644 --- a/src/kemal/context.cr +++ b/src/kemal/context.cr @@ -2,7 +2,6 @@ # information such as params, content_type e.g class HTTP::Server class Context - def params @request.url_params = route_lookup.params @params ||= Kemal::ParamParser.new(@request) diff --git a/src/kemal/param_parser.cr b/src/kemal/param_parser.cr index 69459cc..e7ef0f5 100644 --- a/src/kemal/param_parser.cr +++ b/src/kemal/param_parser.cr @@ -18,7 +18,12 @@ class Kemal::ParamParser {% for method in %w(url query body json) %} def {{method.id}} + # check memoization + return @{{method.id}} if @{{method.id}}_parsed + parse_{{method.id}} + # memoize + @{{method.id}}_parsed = true @{{method.id}} end {% end %} @@ -67,6 +72,4 @@ class Kemal::ParamParser end part_params end - end -