diff options
author | Colin Okay <okay@toyful.space> | 2022-02-08 11:47:07 -0600 |
---|---|---|
committer | Colin Okay <okay@toyful.space> | 2022-02-08 11:47:07 -0600 |
commit | ca67709947d065784b219f184a17ee20fcb38b3b (patch) | |
tree | e4f2a78e2f7971a17d8778e13303cce149648259 | |
parent | ddbdb583e0cb309db5d5b03cc5bcf5216951d389 (diff) |
adding route variables to the documentation generator
-rw-r--r-- | lazybones-documentation.lisp | 18 | ||||
-rw-r--r-- | 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." |