Skip to content

Commit 20c4036

Browse files
committed
Bind wrapped type->lifecycle in specs
1 parent 849bac0 commit 20c4036

File tree

2 files changed

+33
-33
lines changed

2 files changed

+33
-33
lines changed

src/cljfx/dev.clj

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,9 @@
3939
(def ^:dynamic *type->lifecycle*
4040
(some-fn fx/keyword->lifecycle fx/fn->lifecycle))
4141

42-
(defn- type->lifecycle [x]
43-
(or (*type->lifecycle* x) x))
44-
4542
(defn- valid-fx-type? [m]
46-
(let [lifecycle (type->lifecycle (:fx/type m))]
43+
(let [type (:fx/type m)
44+
lifecycle (or (*type->lifecycle* type) type)]
4745
(or (contains? (meta lifecycle) `lifecycle/create)
4846
(satisfies? lifecycle/Lifecycle lifecycle))))
4947

@@ -244,7 +242,7 @@
244242

245243
(defn wrap-type->lifecycle [type->lifecycle]
246244
(fn [type]
247-
(wrap-lifecycle type (type->lifecycle type))))
245+
(wrap-lifecycle type type->lifecycle)))
248246

249247
(def type->lifecycle
250248
(wrap-type->lifecycle (some-fn fx/keyword->lifecycle fx/fn->lifecycle)))

src/cljfx/dev/validation.clj

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -57,32 +57,34 @@
5757
(str " in " in)))))
5858
(str/join "\n")))
5959

60-
(defn- ensure-valid-desc [desc fx-type]
61-
(when-let [explain-data (s/explain-data :cljfx/desc (assoc desc :fx/type fx-type))]
62-
(throw (ex-info (str "Invalid cljfx description of " (type->string fx-type) " type:\n"
63-
(explain-str explain-data))
64-
explain-data))))
60+
(defn- ensure-valid-desc [desc fx-type type->lifecycle]
61+
(binding [*type->lifecycle* type->lifecycle]
62+
(when-let [explain-data (s/explain-data :cljfx/desc (assoc desc :fx/type fx-type))]
63+
(throw (ex-info (str "Invalid cljfx description of " (type->string fx-type) " type:\n"
64+
(explain-str explain-data))
65+
explain-data)))))
6566

66-
(defn- wrap-lifecycle [fx-type lifecycle]
67-
(reify lifecycle/Lifecycle
68-
(create [_ desc opts]
69-
(let [stack (conj (::stack opts) fx-type)
70-
opts (assoc opts ::stack stack)]
71-
(try
72-
(ensure-valid-desc desc fx-type)
73-
(lifecycle/create lifecycle desc opts)
74-
(catch Exception ex (re-throw-with-stack ex stack)))))
75-
(advance [_ component desc opts]
76-
(let [stack (conj (::stack opts) fx-type)
77-
opts (assoc opts ::stack stack)]
78-
(try
79-
(ensure-valid-desc desc fx-type)
80-
(lifecycle/advance lifecycle component desc opts)
81-
(catch Exception ex (re-throw-with-stack ex stack)))))
82-
(delete [_ component opts]
83-
(let [stack (conj (::stack opts) fx-type)
84-
opts (assoc opts ::stack stack)]
85-
(try
86-
(lifecycle/delete lifecycle component opts)
87-
(catch Exception ex (re-throw-with-stack ex stack))))
88-
(lifecycle/delete lifecycle component opts))))
67+
(defn- wrap-lifecycle [fx-type type->lifecycle]
68+
(let [lifecycle (or (type->lifecycle fx-type) fx-type)]
69+
(reify lifecycle/Lifecycle
70+
(create [_ desc opts]
71+
(let [stack (conj (::stack opts) fx-type)
72+
opts (assoc opts ::stack stack)]
73+
(try
74+
(ensure-valid-desc desc fx-type type->lifecycle)
75+
(lifecycle/create lifecycle desc opts)
76+
(catch Exception ex (re-throw-with-stack ex stack)))))
77+
(advance [_ component desc opts]
78+
(let [stack (conj (::stack opts) fx-type)
79+
opts (assoc opts ::stack stack)]
80+
(try
81+
(ensure-valid-desc desc fx-type type->lifecycle)
82+
(lifecycle/advance lifecycle component desc opts)
83+
(catch Exception ex (re-throw-with-stack ex stack)))))
84+
(delete [_ component opts]
85+
(let [stack (conj (::stack opts) fx-type)
86+
opts (assoc opts ::stack stack)]
87+
(try
88+
(lifecycle/delete lifecycle component opts)
89+
(catch Exception ex (re-throw-with-stack ex stack))))
90+
(lifecycle/delete lifecycle component opts)))))

0 commit comments

Comments
 (0)