Skip to content

Commit

Permalink
Add :and/:or special cases to selector args
Browse files Browse the repository at this point in the history
  • Loading branch information
madstap committed Feb 6, 2021
1 parent 976dc18 commit ccd96df
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 11 deletions.
7 changes: 6 additions & 1 deletion examples/kafka.clj
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
(assoc ::elasticsearch {:url "..."})
(assoc-in [::server :elastic] (ig/ref ::elasticsearch))))

(derive ::consumer2 ::foo)

(def config
{::db {:url "..."}
::cache {:url "..."}
Expand Down Expand Up @@ -71,13 +73,16 @@

(igviz/viz config rules {:open? true})


(igviz/viz
config
{:derived {;; ::consumer1 :remove
;; ::error-component :remove
;; ::server :remove
[:and ::consumer ::foo] {:merge-attrs {:color :blue}}
}
:related {::consumer1 {:merge-attrs {:color :red}}}}
:related {[:or ::consumer1 ::producer] {:merge-attrs {:color :red}}}
}
{:open? true})

(ig/init config)
Expand Down
38 changes: 28 additions & 10 deletions src/madstap/igviz/alpha.clj
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,26 @@
(defmulti select
"Select a part of the graph"
{:arglists '([op graph selector])}
(fn [op _ _] op))
(fn [op _ selector]
(if (vector? selector)
(case (first selector)
:and ::and
:or ::or)
op)))

(defn selected-and [selections]
(apply merge-with set/intersection selections))

(defn selected-or [selections]
(apply merge-with set/union selections))

(defmethod select ::and
[op graph [_ & selectors]]
(selected-and (map #(select op graph %) selectors)))

(defmethod select ::or
[op graph [_ & selectors]]
(selected-or (map #(select op graph %) selectors)))

(defmulti select-transform
"Used if a select needs to transform the graph as well.
Expand Down Expand Up @@ -144,9 +163,8 @@
;; TODO: Better name for this? :connected ?
(defmethod select :related
[_ graph ks]
(merge-with set/union
(select :dependencies graph ks)
(select :dependents graph ks)))
(selected-or [(select :dependencies graph ks)
(select :dependents graph ks)]))

(defmethod select :ks
[_ {:igviz/keys [edges] :as graph} ks]
Expand Down Expand Up @@ -237,13 +255,13 @@
transforms)]
[selector selector-arg transform transform-arg]))

(defn apply-rule [graph [selector sel-arg transformation trans-arg]]
(let [selected (select selector graph sel-arg)
g2 (select-transform selector graph selected)]
(transform transformation g2 selected trans-arg)))

(defn apply-rules [graph rules]
(reduce (fn [g1 [sel sel-arg trans trans-arg]]
(let [selected (select sel g1 sel-arg)
g2 (select-transform sel g1 selected)]
(transform trans g2 selected trans-arg)))
graph
(expand-rules rules)))
(reduce apply-rule graph (expand-rules rules)))

(defn dot-edges [edges]
(map (fn [{:igviz.edge/keys [src-id dest-id]
Expand Down

0 comments on commit ccd96df

Please sign in to comment.