Permalink
Please sign in to comment.
Showing
with
43 additions
and 0 deletions.
19
ring-core/src/ring/middleware/flash.clj
| @@ -0,0 +1,19 @@ | ||
| +(ns ring.middleware.flash | ||
| + "A session-based flash store that persists to the next request.") | ||
| + | ||
| +(defn wrap-flash | ||
| + "If a :flash key is set on the response by the handler, a :flash key with | ||
| + the same value will be set on the next request that shares the same session. | ||
| + This is useful for small messages that persist across redirects." | ||
| + [handler] | ||
| + (fn [request] | ||
| + (let [session (request :session) | ||
| + flash (session :_flash) | ||
| + session (dissoc session :_flash) | ||
| + request (assoc request | ||
| + :session session | ||
| + :flash flash) | ||
| + response (handler request) | ||
| + session (if-let [flash (response :flash)] | ||
| + (assoc (response :session) :_flash flash))] | ||
| + (assoc response :session session)))) |
24
ring-core/test/ring/middleware/flash_test.clj
| @@ -0,0 +1,24 @@ | ||
| +(ns ring.middleware.flash-test | ||
| + (:use clojure.test | ||
| + ring.middleware.flash)) | ||
| + | ||
| +(deftest flash-is-added-to-session | ||
| + (let [message {:error "Could not save"} | ||
| + handler (wrap-flash (constantly {:flash message})) | ||
| + response (handler {:session {}})] | ||
| + (is (= (:session response) {:_flash message})))) | ||
| + | ||
| +(deftest flash-is-retrieved-from-session | ||
| + (let [message {:error "Could not save"} | ||
| + handler (wrap-flash | ||
| + (fn [request] | ||
| + (is (= (:flash request) message)) | ||
| + {}))] | ||
| + (handler {:session {:_flash message}}))) | ||
| + | ||
| +(deftest flash-is-removed-after-read | ||
| + (let [message {:error "Could not save"} | ||
| + handler (wrap-flash (constantly {})) | ||
| + response (handler {:session {:_flash message}})] | ||
| + (is (nil? (:flash response))) | ||
| + (is (nil? (-> response :session :_flash))))) |
0 comments on commit
70d71e6