mount.tools.graph: states-with deps
This commit is contained in:
parent
242080bf2d
commit
4f218f4feb
4 changed files with 31 additions and 18 deletions
|
|
@ -2,7 +2,7 @@
|
||||||
(:require [clojure.tools.nrepl.server :refer [start-server stop-server]]
|
(:require [clojure.tools.nrepl.server :refer [start-server stop-server]]
|
||||||
[mount.core :as mount :refer [defstate]]
|
[mount.core :as mount :refer [defstate]]
|
||||||
[app.conf :refer [config]]
|
[app.conf :refer [config]]
|
||||||
[app.www])
|
[app.www :refer [nyse-app]])
|
||||||
(:gen-class)) ;; for -main / uberjar (no need in dev)
|
(:gen-class)) ;; for -main / uberjar (no need in dev)
|
||||||
|
|
||||||
;; example on creating a network REPL
|
;; example on creating a network REPL
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
[clojure.tools.namespace.repl :as tn]
|
[clojure.tools.namespace.repl :as tn]
|
||||||
[boot.core :refer [load-data-readers!]]
|
[boot.core :refer [load-data-readers!]]
|
||||||
[mount.core :as mount]
|
[mount.core :as mount]
|
||||||
|
[mount.tools.graph :refer [states-with-deps]]
|
||||||
[app.utils.logging :refer [with-logging-status]]
|
[app.utils.logging :refer [with-logging-status]]
|
||||||
[app.www]
|
[app.www]
|
||||||
[app.example]
|
[app.example]
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
(ns mount.core
|
(ns mount.core
|
||||||
#?(:clj (:require [mount.tools.macro :refer [on-error throw-runtime] :as macro])
|
#?(:clj (:require [mount.tools.macro :refer [on-error throw-runtime] :as macro]
|
||||||
|
[clojure.string :as s])
|
||||||
:cljs (:require [mount.tools.macro :as macro]))
|
:cljs (:require [mount.tools.macro :as macro]))
|
||||||
#?(:cljs (:require-macros [mount.core]
|
#?(:cljs (:require-macros [mount.core]
|
||||||
[mount.tools.macro :refer [on-error throw-runtime]])))
|
[mount.tools.macro :refer [on-error throw-runtime]])))
|
||||||
|
|
@ -175,22 +176,6 @@
|
||||||
(defn- find-all-states []
|
(defn- find-all-states []
|
||||||
(keys @meta-state))
|
(keys @meta-state))
|
||||||
|
|
||||||
;;TODO ns based for now. need to be _state_ based
|
|
||||||
#_(defn- add-deps [{:keys [ns] :as state} all]
|
|
||||||
(let [refers (ns-refers ns)
|
|
||||||
any (set all)
|
|
||||||
deps (filter (comp any val) refers)]
|
|
||||||
(assoc state :deps deps)))
|
|
||||||
|
|
||||||
#_(defn states-with-deps []
|
|
||||||
(let [all (find-all-states)]
|
|
||||||
(->> (map (comp #(add-deps % all)
|
|
||||||
#(select-keys % [:name :order :ns :status])
|
|
||||||
meta)
|
|
||||||
all)
|
|
||||||
(sort-by :order))))
|
|
||||||
|
|
||||||
|
|
||||||
#?(:clj
|
#?(:clj
|
||||||
(defn- var-to-str [v]
|
(defn- var-to-str [v]
|
||||||
(str v)))
|
(str v)))
|
||||||
|
|
|
||||||
27
src/mount/tools/graph.cljc
Normal file
27
src/mount/tools/graph.cljc
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
(ns mount.tools.graph)
|
||||||
|
|
||||||
|
#?(:clj
|
||||||
|
;;TODO ns based for now. need to be _state_ based. or better yet need to have a real graph :)
|
||||||
|
(defn- add-deps [{:keys [ns] :as state} states]
|
||||||
|
(let [refers (ns-refers ns)
|
||||||
|
any (->> states vals (map :var) set)
|
||||||
|
deps (->> (filter (comp any val) refers)
|
||||||
|
(map (comp str second))
|
||||||
|
set)]
|
||||||
|
(assoc (dissoc state :ns)
|
||||||
|
:deps deps))))
|
||||||
|
|
||||||
|
#?(:clj
|
||||||
|
(defn- meta-with-ns [[sname {:keys [var] :as smeta}]]
|
||||||
|
(let [sns (-> var meta :ns)]
|
||||||
|
(assoc smeta :ns sns :name sname))))
|
||||||
|
|
||||||
|
#?(:clj
|
||||||
|
(defn states-with-deps []
|
||||||
|
(let [states @@#'mount.core/meta-state]
|
||||||
|
(->> (map (comp #(add-deps % states)
|
||||||
|
#(select-keys % [:name :order :ns :status])
|
||||||
|
meta-with-ns)
|
||||||
|
states)
|
||||||
|
(sort-by :order)))))
|
||||||
|
|
||||||
Loading…
Reference in a new issue