diff --git a/src/views/base_subscribed_views.clj b/src/views/base_subscribed_views.clj index c2c9585..074f2f0 100644 --- a/src/views/base_subscribed_views.clj +++ b/src/views/base_subscribed_views.clj @@ -1,7 +1,7 @@ (ns views.base-subscribed-views (:require [views.db.load :refer [initial-views]] - [views.subscribed-views :refer [SubscribedViews subscriber-key-fn prefix-fn]] + [views.subscribed-views :refer [SubscribedViews subscriber-key-fn namespace-fn]] [views.subscriptions :as vs :refer [add-subscriptions! remove-subscription! subscriptions-for]] [clojure.tools.logging :refer [debug info warn error]] [clojure.core.async :refer [put! > (initial-views db view-sigs templates subbed-views) @@ -63,21 +63,21 @@ (let [subscriber-key (subscriber-key-fn this unsub-req) view-sigs (:views unsub-req)] (info "Unsubscribing views: " view-sigs " for subscriber " subscriber-key) - (if-let [prefix (prefix-fn this unsub-req)] - (doseq [vs view-sigs] (remove-subscription! subscriber-key vs prefix)) + (if-let [namespace (namespace-fn this unsub-req)] + (doseq [vs view-sigs] (remove-subscription! subscriber-key vs namespace)) (doseq [vs view-sigs] (remove-subscription! subscriber-key vs))))) (disconnect [this disconnect-req] (let [subscriber-key (:subscriber-key disconnect-req) - prefix (prefix-fn this disconnect-req) - view-sigs (if prefix (subscriptions-for subscriber-key prefix) (subscriptions-for subscriber-key))] - (if prefix - (doseq [vs view-sigs] (remove-subscription! subscriber-key vs prefix)) + namespace (namespace-fn this disconnect-req) + view-sigs (if namespace (subscriptions-for subscriber-key namespace) (subscriptions-for subscriber-key))] + (if namespace + (doseq [vs view-sigs] (remove-subscription! subscriber-key vs namespace)) (doseq [vs view-sigs] (remove-subscription! subscriber-key vs))))) (subscriber-key-fn [this msg] (:subscriber-key msg)) - (prefix-fn [this msg] nil) + (namespace-fn [this msg] nil) ;; DB interaction (subscribed-views [this] @vs/compiled-views) diff --git a/src/views/subscribed_views.clj b/src/views/subscribed_views.clj index 6457c4a..8fdf294 100644 --- a/src/views/subscribed_views.clj +++ b/src/views/subscribed_views.clj @@ -6,7 +6,7 @@ (unsubscribe-views [this unsub-request]) (disconnect [this disconnect-request]) (subscriber-key-fn [this msg]) - (prefix-fn [this msg]) + (namespace-fn [this msg]) ;; DB interaction (broadcast-deltas [this db views-with-deltas]) diff --git a/src/views/subscriptions.clj b/src/views/subscriptions.clj index 2528cfd..bf7043f 100644 --- a/src/views/subscriptions.clj +++ b/src/views/subscriptions.clj @@ -7,12 +7,14 @@ ;; ;; or ;; -;; {prefix {[:view-sig 1 "arg2"] {:keys [1 2 3 4 ... ] :view-map {:view ...}}}} +;; {namespace {[:view-sig 1 "arg2"] {:keys [1 2 3 4 ... ] :view-map {:view ...}}}} ;; (def subscribed-views (atom {})) (def compiled-views (atom {})) +(def default-ns :default-ns) + (defn- add-subscriber-key [subscriber-key] (fn [view-subs] @@ -26,59 +28,50 @@ (defn add-subscription! ([subscriber-key view-sig templates] - (swap! subscribed-views #(update-in % [view-sig] (add-subscriber-key subscriber-key))) - (add-compiled-view! view-sig templates)) - ([subscriber-key view-sig templates prefix] - (swap! subscribed-views #(update-in % [prefix view-sig] (add-subscriber-key subscriber-key))) + (add-subscription! subscriber-key view-sig templates default-ns)) + ([subscriber-key view-sig templates namespace] + (swap! subscribed-views #(update-in % [namespace view-sig] (add-subscriber-key subscriber-key))) (add-compiled-view! view-sig templates))) (defn add-subscriptions! ([subscriber-key view-sigs templates] - (add-subscriptions! subscriber-key view-sigs templates nil)) - ([subscriber-key view-sigs templates prefix] - (last (mapv - #(if prefix - (add-subscription! subscriber-key % templates prefix) - (add-subscription! subscriber-key % templates)) - view-sigs)))) + (add-subscriptions! subscriber-key view-sigs templates default-ns)) + ([subscriber-key view-sigs templates namespace] + (last (mapv #(add-subscription! subscriber-key % templates namespace) view-sigs)))) (defn subscriptions-for - ([subscriber-key] - (reduce #(if (contains? (second %2) subscriber-key) (conj %1 (first %2)) %1) [] @subscribed-views)) - ([subscriber-key prefix] - (reduce #(if (contains? (second %2) subscriber-key) (conj %1 (first %2)) %1) [] (get @subscribed-views prefix)))) + ([subscriber-key] (subscriptions-for subscriber-key default-ns)) + ([subscriber-key namespace] + (reduce #(if (contains? (second %2) subscriber-key) (conj %1 (first %2)) %1) [] (get @subscribed-views namespace)))) (defn subscribed-to - ([view-sig] - (get @subscribed-views view-sig)) - ([view-sig prefix] - (get-in @subscribed-views [prefix view-sig]))) + ([view-sig] (subscribed-to view-sig default-ns)) + ([view-sig namespace] + (get-in @subscribed-views [namespace view-sig]))) (defn subscribed-to? ([subscriber-key view-sig] - (subscribed-to? subscriber-key view-sig nil)) - ([subscriber-key view-sig prefix] - (if-let [view-subs (if prefix (subscribed-to view-sig prefix) (subscribed-to view-sig))] + (subscribed-to? subscriber-key view-sig default-ns)) + ([subscriber-key view-sig namespace] + (if-let [view-subs (subscribed-to view-sig namespace)] (view-subs subscriber-key)))) (defn- remove-key-or-view - [subscriber-key view-sig prefix] + [subscriber-key view-sig namespace] (fn [subbed-views] - (let [path (if prefix [prefix view-sig] [view-sig]) + (let [path [namespace view-sig] updated (update-in subbed-views path disj subscriber-key)] (if (seq (get-in updated path)) updated (do (swap! compiled-views dissoc view-sig) ; remove the compiled view as well - (if prefix - (update-in updated [prefix] dissoc view-sig) - (dissoc updated view-sig))))))) + (update-in updated [namespace] dissoc view-sig)))))) (defn remove-subscription! ([subscriber-key view-sig] - (remove-subscription! subscriber-key view-sig nil)) - ([subscriber-key view-sig prefix] - (when (subscribed-to? subscriber-key view-sig (if prefix prefix)) - (swap! subscribed-views (remove-key-or-view subscriber-key view-sig prefix))))) + (remove-subscription! subscriber-key view-sig default-ns)) + ([subscriber-key view-sig namespace] + (when (subscribed-to? subscriber-key view-sig namespace) + (swap! subscribed-views (remove-key-or-view subscriber-key view-sig namespace))))) (defn compiled-view-for [view-sig] diff --git a/test/views/base_subscribed_views_test.clj b/test/views/base_subscribed_views_test.clj index 9be8331..0f3c979 100644 --- a/test/views/base_subscribed_views_test.clj +++ b/test/views/base_subscribed_views_test.clj @@ -1,7 +1,7 @@ (ns views.base-subscribed-views-test (:require [views.base-subscribed-views :as bsv] ; :refer [BaseSubscribedViews]] - [views.subscribed-views :refer [SubscribedViews subscriber-key-fn prefix-fn subscribe-views unsubscribe-views disconnect]] + [views.subscribed-views :refer [SubscribedViews subscriber-key-fn namespace-fn subscribe-views unsubscribe-views disconnect]] [views.subscriptions :as vs :refer [subscribed-to?]] [views.fixtures :as vf] [clojure.test :refer [use-fixtures deftest is]] diff --git a/test/views/subscriptions_test.clj b/test/views/subscriptions_test.clj index 0a9645a..505e92c 100644 --- a/test/views/subscriptions_test.clj +++ b/test/views/subscriptions_test.clj @@ -16,12 +16,12 @@ (vs/add-subscription! key view-sig templates) (is (vs/subscribed-to? key view-sig)))) -(deftest can-use-prefix - (let [prefix1 1, prefix2 2, key 1, view-sig [:user-posts 1]] - (vs/add-subscription! key view-sig templates prefix1) - (vs/add-subscription! key view-sig templates prefix2) - (is (vs/subscribed-to? key view-sig prefix1)) - (is (vs/subscribed-to? key view-sig prefix2)))) +(deftest can-use-namespace + (let [namespace1 1, namespace2 2, key 1, view-sig [:user-posts 1]] + (vs/add-subscription! key view-sig templates namespace1) + (vs/add-subscription! key view-sig templates namespace2) + (is (vs/subscribed-to? key view-sig namespace1)) + (is (vs/subscribed-to? key view-sig namespace2)))) (deftest removes-a-subscription (let [key 1, view-sig [:user-posts 1]] @@ -33,19 +33,19 @@ (vs/remove-subscription! 1 [:user-posts 1]) (is (= {} @vs/subscribed-views))) -(deftest removes-a-subscription-with-prefix - (let [prefix1 1, prefix2 2, key 1, view-sig [:user-posts 1]] - (vs/add-subscription! key view-sig templates prefix1) - (vs/add-subscription! key view-sig templates prefix2) - (vs/remove-subscription! key view-sig prefix1) - (is (not (vs/subscribed-to? key view-sig prefix1))) - (is (vs/subscribed-to? key view-sig prefix2)))) +(deftest removes-a-subscription-with-namespace + (let [namespace1 1, namespace2 2, key 1, view-sig [:user-posts 1]] + (vs/add-subscription! key view-sig templates namespace1) + (vs/add-subscription! key view-sig templates namespace2) + (vs/remove-subscription! key view-sig namespace1) + (is (not (vs/subscribed-to? key view-sig namespace1))) + (is (vs/subscribed-to? key view-sig namespace2)))) (deftest removes-unsubscribed-to-view-from-subscribed-views (let [key 1, view-sig [:user-posts 1]] (vs/add-subscription! key view-sig templates) (vs/remove-subscription! key view-sig) - (is (= {} @vs/subscribed-views)))) + (is (= {:default-ns {}} @vs/subscribed-views)))) (deftest adds-multiple-views-at-a-time (let [key 1, view-sigs [[:user-posts 1] [:user-posts 2]]] @@ -70,7 +70,7 @@ (vs/add-subscriptions! key view-sigs templates) (is (= (set (vs/subscriptions-for 1)) (set view-sigs))))) -(deftest retrieves-subscriptions-for-subscriber-with-prefix - (let [key 1, view-sigs [[:users][:user-posts 1]] prefix 1] - (vs/add-subscriptions! key view-sigs templates prefix) - (is (= (set (vs/subscriptions-for 1 prefix)) (set view-sigs))))) +(deftest retrieves-subscriptions-for-subscriber-with-namespace + (let [key 1, view-sigs [[:users][:user-posts 1]] namespace 1] + (vs/add-subscriptions! key view-sigs templates namespace) + (is (= (set (vs/subscriptions-for 1 namespace)) (set view-sigs)))))