diff --git a/dev/clj/app/example.clj b/dev/clj/app/example.clj index ab425eb..6583d02 100644 --- a/dev/clj/app/example.clj +++ b/dev/clj/app/example.clj @@ -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 diff --git a/dev/clj/dev.clj b/dev/clj/dev.clj index 252108f..079095b 100644 --- a/dev/clj/dev.clj +++ b/dev/clj/dev.clj @@ -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] diff --git a/src/mount/core.cljc b/src/mount/core.cljc index 3244bb0..abaf814 100644 --- a/src/mount/core.cljc +++ b/src/mount/core.cljc @@ -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))) diff --git a/src/mount/tools/graph.cljc b/src/mount/tools/graph.cljc new file mode 100644 index 0000000..9113c4e --- /dev/null +++ b/src/mount/tools/graph.cljc @@ -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))))) +