aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Okay <okay@toyful.space>2022-02-08 11:47:07 -0600
committerColin Okay <okay@toyful.space>2022-02-08 11:47:07 -0600
commitca67709947d065784b219f184a17ee20fcb38b3b (patch)
treee4f2a78e2f7971a17d8778e13303cce149648259
parentddbdb583e0cb309db5d5b03cc5bcf5216951d389 (diff)
adding route variables to the documentation generator
-rw-r--r--lazybones-documentation.lisp18
-rw-r--r--lazybones.lisp5
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."