File tree Expand file tree Collapse file tree 3 files changed +62
-0
lines changed
test/darkleaf/di/tutorial Expand file tree Collapse file tree 3 files changed +62
-0
lines changed Original file line number Diff line number Diff line change 91
91
#_[:li [:a {:href (clerk/doc-url " test/darkleaf/di/tutorial/x_instrument_test.clj" )} " Instrument" ]]
92
92
[:li [:a {:href (clerk/doc-url " test/darkleaf/di/tutorial/x_update_key_test.clj" )} " Update key" ]]
93
93
[:li [:a {:href (clerk/doc-url " test/darkleaf/di/tutorial/x_log_test.clj" )} " Log" ]]
94
+ [:li [:a {:href (clerk/doc-url " test/darkleaf/di/tutorial/x_inspect_test.clj" )} " Inspect" ]]
94
95
[:li [:a {:href (clerk/doc-url " test/darkleaf/di/tutorial/y_graceful_stop_test.clj" )} " Graceful stop" ]]
95
96
[:li [:a {:href (clerk/doc-url " test/darkleaf/di/tutorial/y_multi_arity_service_test.clj" )} " Multi arity service" ]]
96
97
[:li [:a {:href (clerk/doc-url " test/darkleaf/di/tutorial/z_multi_system_test.clj" )} " Multi system" ]]
118
119
; ; ### `darkleaf.di.core`
119
120
(view-doc #'di/start)
120
121
(view-doc #'di/stop)
122
+ (view-doc #'di/inspect)
121
123
(view-doc #'di/ref)
122
124
(view-doc #'di/opt-ref)
123
125
(view-doc #'di/template)
Original file line number Diff line number Diff line change 829
829
(p/demolish factory obj)
830
830
(after-demolish! {:key key :object obj})
831
831
nil ))))))
832
+
833
+
834
+ (defn- inspect-middleware []
835
+ (fn [registry]
836
+ (fn [key]
837
+ (let [factory (registry key)
838
+ declared-deps (p/dependencies factory)
839
+ info (into {}
840
+ (filter (fn [[k v]] (some? v)))
841
+ {:key key
842
+ :dependencies declared-deps})]
843
+ (reify p/Factory
844
+ (dependencies [_]
845
+ declared-deps)
846
+ (build [_ deps]
847
+ (into [info]
848
+ (comp
849
+ (mapcat val)
850
+ (distinct ))
851
+ deps))
852
+ (demolish [_ obj]))))))
853
+
854
+ (defn inspect
855
+ " Collects and returns a vector of keys along with their dependencies.
856
+ Useful for inspecting enabled components and services.
857
+ Evaluates all registries with middlewares applied.
858
+
859
+ Expects the same arguments as `start` and returns a vector of keys with dependencies e.g.:
860
+
861
+ ```clojure
862
+ [{:key `root :dependencies {`foo :required `bar :optional}}
863
+ {:key `foo}
864
+ {:key `bar}]
865
+ ```"
866
+ [key & middlewares]
867
+ (with-open [components (start key
868
+ middlewares
869
+ (inspect-middleware ))]
870
+ @components))
Original file line number Diff line number Diff line change
1
+ (ns darkleaf.di.tutorial.x-inspect-test
2
+ (:require
3
+ [clojure.test :as t]
4
+ [darkleaf.di.core :as di]))
5
+
6
+ (defn a []
7
+ :ok )
8
+
9
+ (defn b [{a `a}]
10
+ :ok )
11
+
12
+ (defn c [{a `a
13
+ b `b
14
+ :or {b :default }}]
15
+ :ok )
16
+
17
+ (t/deftest ok
18
+ (t/is (= [{:key `c :dependencies {`a :required `b :optional }}
19
+ {:key `a}
20
+ {:key `b :dependencies {`a :required }}]
21
+ (di/inspect `c))))
You can’t perform that action at this time.
0 commit comments