mount.tools.graph: states-with deps

This commit is contained in:
anatoly 2015-12-24 13:55:39 -05:00
parent 242080bf2d
commit 4f218f4feb
4 changed files with 31 additions and 18 deletions

View file

@ -2,7 +2,7 @@
(:require [clojure.tools.nrepl.server :refer [start-server stop-server]]
[mount.core :as mount :refer [defstate]]
[app.conf :refer [config]]
[app.www])
[app.www :refer [nyse-app]])
(:gen-class)) ;; for -main / uberjar (no need in dev)
;; example on creating a network REPL

View file

@ -3,6 +3,7 @@
[clojure.tools.namespace.repl :as tn]
[boot.core :refer [load-data-readers!]]
[mount.core :as mount]
[mount.tools.graph :refer [states-with-deps]]
[app.utils.logging :refer [with-logging-status]]
[app.www]
[app.example]

View file

@ -1,5 +1,6 @@
(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-macros [mount.core]
[mount.tools.macro :refer [on-error throw-runtime]])))
@ -175,22 +176,6 @@
(defn- find-all-states []
(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
(defn- var-to-str [v]
(str v)))

View 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)))))