From ca67709947d065784b219f184a17ee20fcb38b3b Mon Sep 17 00:00:00 2001 From: Colin Okay Date: Tue, 8 Feb 2022 11:47:07 -0600 Subject: adding route variables to the documentation generator --- lazybones-documentation.lisp | 18 ++++++++++++++++++ lazybones.lisp | 5 +++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/lazybones-documentation.lisp b/lazybones-documentation.lisp index 16164c5..b8e1c34 100644 --- a/lazybones-documentation.lisp +++ b/lazybones-documentation.lisp @@ -32,6 +32,14 @@ (princ (if content-type content-type default-content-type )) (princ "*") newline + (a:when-let (vars (endpoint-route-vars ep)) + (princ "Route Variables: ") newline + (dolist (var vars) + (princ "- ") (princ var) + (a:when-let (val-parser (route-var-value-parser ep var)) + (princ ": ") (princ (strip-newlines (documentation val-parser 'function))))) + newline) + (when authorizer (princ "Authorization Required: ") newline @@ -51,6 +59,16 @@ > " string))) +(defun strip-newlines (string) + (str:replace-all '(#\newline) "" string)) + (defun function-or-function-name-p (thing) (or (functionp thing) (and (symbolp thing) (fboundp thing)))) + +(defun endpoint-route-vars (ep) + "return a list of route variables for endpoint EP" + (mapcar 'first (remove-if-not #'consp (endpoint-dispatch-pattern ep)))) + +(defun route-var-value-parser (ep var) + (second (assoc var (remove-if-not #'consp (endpoint-dispatch-pattern ep))))) diff --git a/lazybones.lisp b/lazybones.lisp index 148cd05..5f46a83 100644 --- a/lazybones.lisp +++ b/lazybones.lisp @@ -285,11 +285,12 @@ Returns NIL on failure." (list (string-upcase var-name) (read-from-string (first decoder?))) (list (string-upcase var-name)))))) -(defun route-variables (route) - (loop for term in route +(defun route-variables (pattern) + (loop for term in pattern when (listp term) collect (first term))) + (defun run-endpoint (endpoint args request response app) "Bind dynamic variables *request* *response* and *app* before applying HANDLER-FUNCTION slot of ENDPOINT to the ARGS list." -- cgit v1.2.3