Permalink
Please sign in to comment.
Browse files
Changed session store from function map to protocol/types
- Loading branch information...
Showing
with
87 additions
and 62 deletions.
- +4 −4 ring-core/src/ring/middleware/session.clj
- +13 −12 ring-core/src/ring/middleware/session/cookie.clj
- +14 −10 ring-core/src/ring/middleware/session/memory.clj
- +7 −0 ring-core/src/ring/middleware/session/store.clj
- +10 −10 ring-core/test/ring/middleware/session/cookie_test.clj
- +10 −10 ring-core/test/ring/middleware/session/memory_test.clj
- +29 −16 ring-core/test/ring/middleware/session_test.clj
8
ring-core/src/ring/middleware/session.clj
25
ring-core/src/ring/middleware/session/cookie.clj
24
ring-core/src/ring/middleware/session/memory.clj
| @@ -1,17 +1,21 @@ | ||
| (ns ring.middleware.session.memory | ||
| "In-memory session storage." | ||
| + (:use ring.middleware.session.store) | ||
| (:import java.util.UUID)) | ||
| +(deftype MemoryStore [session-map] | ||
| + SessionStore | ||
| + (read-session [_ key] | ||
| + (@session-map key {})) | ||
| + (write-session [_ key data] | ||
| + (let [key (or key (str (UUID/randomUUID)))] | ||
| + (swap! session-map assoc key data) | ||
| + key)) | ||
| + (delete-session [_ key] | ||
| + (swap! session-map dissoc key) | ||
| + nil)) | ||
| + | ||
| (defn memory-store | ||
| "Creates an in-memory session storage engine." | ||
| [] | ||
| - (let [session-map (atom {})] | ||
| - {:read (fn [session-key] | ||
| - (@session-map session-key {})) | ||
| - :write (fn [session-key session] | ||
| - (let [session-key (or session-key (str (UUID/randomUUID)))] | ||
| - (swap! session-map assoc session-key session) | ||
| - session-key)) | ||
| - :delete (fn [session-key] | ||
| - (swap! session-map dissoc session-key) | ||
| - nil)})) | ||
| + (MemoryStore. (atom {}))) |
7
ring-core/src/ring/middleware/session/store.clj
| @@ -0,0 +1,7 @@ | ||
| +(ns ring.middleware.session.store | ||
| + "Common session store objects and functions.") | ||
| + | ||
| +(defprotocol SessionStore | ||
| + (read-session [store key] "Read a session map from the store.") | ||
| + (write-session [store key data] "Write a session map to the store.") | ||
| + (delete-session [store key] "Delete a session map from the store.")) |
20
ring-core/test/ring/middleware/session/cookie_test.clj
| @@ -1,33 +1,33 @@ | ||
| (ns ring.middleware.session.cookie-test | ||
| (:use clojure.test | ||
| - ring.middleware.session.cookie)) | ||
| + [ring.middleware.session store cookie])) | ||
| (deftest cookie-session-read-not-exist | ||
| (let [store (cookie-store)] | ||
| - (is ((:read store) "non-existent") | ||
| + (is (read-session store "non-existent") | ||
| {}))) | ||
| (deftest cookie-session-create | ||
| (let [store (cookie-store) | ||
| - sess-key ((:write store) nil {:foo "bar"})] | ||
| + sess-key (write-session store nil {:foo "bar"})] | ||
| (is (not (nil? sess-key))) | ||
| - (is (= ((:read store) sess-key) | ||
| + (is (= (read-session store sess-key) | ||
| {:foo "bar"})))) | ||
| (deftest cookie-session-update | ||
| (let [store (cookie-store) | ||
| - sess-key ((:write store) nil {:foo "bar"}) | ||
| - sess-key* ((:write store) sess-key {:bar "baz"})] | ||
| + sess-key (write-session store nil {:foo "bar"}) | ||
| + sess-key* (write-session store sess-key {:bar "baz"})] | ||
| (is (not (nil? sess-key*))) | ||
| (is (not= sess-key sess-key*)) | ||
| - (is (= ((:read store) sess-key*) | ||
| + (is (= (read-session store sess-key*) | ||
| {:bar "baz"})))) | ||
| (deftest cookie-session-delete | ||
| (let [store (cookie-store) | ||
| - sess-key ((:write store) nil {:foo "bar"}) | ||
| - sess-key* ((:delete store) sess-key)] | ||
| + sess-key (write-session store nil {:foo "bar"}) | ||
| + sess-key* (delete-session store sess-key)] | ||
| (is (not (nil? sess-key*))) | ||
| (is (not= sess-key sess-key*)) | ||
| - (is (= ((:read store) sess-key*) | ||
| + (is (= (read-session store sess-key*) | ||
| {})))) |
20
ring-core/test/ring/middleware/session/memory_test.clj
| @@ -1,30 +1,30 @@ | ||
| (ns ring.middleware.session.memory-test | ||
| (:use clojure.test | ||
| - ring.middleware.session.memory)) | ||
| + [ring.middleware.session store memory])) | ||
| (deftest memory-session-read-not-exist | ||
| (let [store (memory-store)] | ||
| - (is ((:read store) "non-existent") | ||
| + (is (read-session store "non-existent") | ||
| {}))) | ||
| (deftest memory-session-create | ||
| (let [store (memory-store) | ||
| - sess-key ((:write store) nil {:foo "bar"})] | ||
| + sess-key (write-session store nil {:foo "bar"})] | ||
| (is (not (nil? sess-key))) | ||
| - (is (= ((:read store) sess-key) | ||
| + (is (= (read-session store sess-key) | ||
| {:foo "bar"})))) | ||
| (deftest memory-session-update | ||
| (let [store (memory-store) | ||
| - sess-key ((:write store) nil {:foo "bar"}) | ||
| - sess-key* ((:write store) sess-key {:bar "baz"})] | ||
| + sess-key (write-session store nil {:foo "bar"}) | ||
| + sess-key* (write-session store sess-key {:bar "baz"})] | ||
| (is (= sess-key sess-key*)) | ||
| - (is (= ((:read store) sess-key) | ||
| + (is (= (read-session store sess-key) | ||
| {:bar "baz"})))) | ||
| (deftest memory-session-delete | ||
| (let [store (memory-store) | ||
| - sess-key ((:write store) nil {:foo "bar"})] | ||
| - (is (nil? ((:delete store) sess-key))) | ||
| - (is (= ((:read store) sess-key) | ||
| + sess-key (write-session store nil {:foo "bar"})] | ||
| + (is (nil? (delete-session store sess-key))) | ||
| + (is (= (read-session store sess-key) | ||
| {})))) |
45
ring-core/test/ring/middleware/session_test.clj
0 comments on commit
d211f17