From 60af6a3a9447fb5cd624fe7c21258b9fce0ae905 Mon Sep 17 00:00:00 2001 From: Benni Schwerdtner Date: Fri, 7 Apr 2023 12:11:29 +0200 Subject: [PATCH] Add middleware example, reaadme --- babashka.nrepl | 2 +- examples/user_middleware/Readme.md | 33 +++++++++++++++++++ .../user_middleware/my_middleware/deps.edn | 1 + .../my_middleware/src/my/middleware.clj | 6 ++++ examples/user_middleware/my_project/bb.edn | 2 ++ .../my_project/hello_middleware.clj | 1 + 6 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 examples/user_middleware/Readme.md create mode 100644 examples/user_middleware/my_middleware/deps.edn create mode 100644 examples/user_middleware/my_middleware/src/my/middleware.clj create mode 100644 examples/user_middleware/my_project/bb.edn create mode 100644 examples/user_middleware/my_project/hello_middleware.clj diff --git a/babashka.nrepl b/babashka.nrepl index ad763a78..24c5d08e 160000 --- a/babashka.nrepl +++ b/babashka.nrepl @@ -1 +1 @@ -Subproject commit ad763a78f1bc327a493ff0b650aa5408ecbf4819 +Subproject commit 24c5d08eb4795dff04d67cfaed2e4f4ebcf91404 diff --git a/examples/user_middleware/Readme.md b/examples/user_middleware/Readme.md new file mode 100644 index 00000000..973a02f3 --- /dev/null +++ b/examples/user_middleware/Readme.md @@ -0,0 +1,33 @@ +# User Middleware + +- Your middleware is defined in bb user sources. +- Middleware is a function in wrap-middleware style. + +# Example + +Middleware should be a function in the form of: + +```clojure +(defn my-middleware [handler] + (fn [request] + ;; ... + (handler request) + ;; ... + )) +``` + +# Usage + +```shell +bb nrepl-server --middleware [my.middleware/println-middleware] +``` + +--middleware is a vector of fully qualified function symbols. +They are required to be located on the babashka classpath. + +This will start babashka with a nrepl server with the middlware defined in `user_middleware/my_middleware/src/my/middleware.clj`. + +You can now connect to the nrepl like usual. + +It is possible to redefine the middleware function from within the running nrepl, because we keep a reference +to the sci-var of the middlware. diff --git a/examples/user_middleware/my_middleware/deps.edn b/examples/user_middleware/my_middleware/deps.edn new file mode 100644 index 00000000..ccd9a316 --- /dev/null +++ b/examples/user_middleware/my_middleware/deps.edn @@ -0,0 +1 @@ +{:paths ["src"]} diff --git a/examples/user_middleware/my_middleware/src/my/middleware.clj b/examples/user_middleware/my_middleware/src/my/middleware.clj new file mode 100644 index 00000000..bda09838 --- /dev/null +++ b/examples/user_middleware/my_middleware/src/my/middleware.clj @@ -0,0 +1,6 @@ +(ns my.middleware) + +(defn println-middleware [handler] + (fn [request] + (println (:op (:msg request))) + (handler request))) diff --git a/examples/user_middleware/my_project/bb.edn b/examples/user_middleware/my_project/bb.edn new file mode 100644 index 00000000..2ef73ea9 --- /dev/null +++ b/examples/user_middleware/my_project/bb.edn @@ -0,0 +1,2 @@ +{:deps + {my/middleware {:local/root "../my_middleware/"}}} diff --git a/examples/user_middleware/my_project/hello_middleware.clj b/examples/user_middleware/my_project/hello_middleware.clj new file mode 100644 index 00000000..92b1f788 --- /dev/null +++ b/examples/user_middleware/my_project/hello_middleware.clj @@ -0,0 +1 @@ +(ns hello-middleware)