add docstring to main api
This commit is contained in:
parent
ec097f8db2
commit
5b62817bd5
1 changed files with 18 additions and 7 deletions
|
|
@ -11,7 +11,9 @@
|
||||||
|
|
||||||
;; Selector functions
|
;; Selector functions
|
||||||
|
|
||||||
(defn select [selector structure]
|
(defn select
|
||||||
|
"Navigates to and returns a sequence of all the elements specified by the selector."
|
||||||
|
[selector structure]
|
||||||
(let [sp (comp-paths* selector)]
|
(let [sp (comp-paths* selector)]
|
||||||
(select-full* sp
|
(select-full* sp
|
||||||
[]
|
[]
|
||||||
|
|
@ -21,7 +23,7 @@
|
||||||
))
|
))
|
||||||
|
|
||||||
(defn select-one
|
(defn select-one
|
||||||
"Like select, but returns either one element or nil. Throws exception if multiple elements returned"
|
"Like select, but returns either one element or nil. Throws exception if multiple elements found"
|
||||||
[selector structure]
|
[selector structure]
|
||||||
(let [res (select selector structure)]
|
(let [res (select selector structure)]
|
||||||
(when (> (count res) 1)
|
(when (> (count res) 1)
|
||||||
|
|
@ -30,7 +32,7 @@
|
||||||
))
|
))
|
||||||
|
|
||||||
(defn select-one!
|
(defn select-one!
|
||||||
"Returns exactly one element, throws exception if zero or multiple elements returned"
|
"Returns exactly one element, throws exception if zero or multiple elements found"
|
||||||
[selector structure]
|
[selector structure]
|
||||||
(let [res (select-one selector structure)]
|
(let [res (select-one selector structure)]
|
||||||
(when (nil? res) (throw-illegal "No elements found for params: " selector structure))
|
(when (nil? res) (throw-illegal "No elements found for params: " selector structure))
|
||||||
|
|
@ -38,13 +40,16 @@
|
||||||
))
|
))
|
||||||
|
|
||||||
(defn select-first
|
(defn select-first
|
||||||
"Returns first element returned. Not any more efficient than select, just a convenience"
|
"Returns first element found. Not any more efficient than select, just a convenience"
|
||||||
[selector structure]
|
[selector structure]
|
||||||
(first (select selector structure)))
|
(first (select selector structure)))
|
||||||
|
|
||||||
;; Update functions
|
;; Update functions
|
||||||
|
|
||||||
(defn update [selector update-fn structure]
|
(defn update
|
||||||
|
"Navigates to each value specified by the selector and replaces it by the result of running
|
||||||
|
the update-fn on it"
|
||||||
|
[selector update-fn structure]
|
||||||
(let [selector (comp-paths* selector)]
|
(let [selector (comp-paths* selector)]
|
||||||
(update-full* selector
|
(update-full* selector
|
||||||
[]
|
[]
|
||||||
|
|
@ -55,11 +60,17 @@
|
||||||
(apply update-fn (conj vals structure)))
|
(apply update-fn (conj vals structure)))
|
||||||
))))
|
))))
|
||||||
|
|
||||||
(defn setval [selector val structure]
|
(defn setval
|
||||||
|
"Navigates to each value specified by the selector and replaces it by val"
|
||||||
|
[selector val structure]
|
||||||
(update selector (fn [_] val) structure))
|
(update selector (fn [_] val) structure))
|
||||||
|
|
||||||
(defn replace-in [selector update-fn structure & {:keys [merge-fn] :or {merge-fn concat}}]
|
(defn replace-in [selector update-fn structure & {:keys [merge-fn] :or {merge-fn concat}}]
|
||||||
"Returns [new structure [<user-ret> <user-ret>...]"
|
"Similar to update, except returns a pair of [updated-structure sequence-of-user-ret].
|
||||||
|
The update-fn in this case is expected to return [ret user-ret]. ret is
|
||||||
|
what's used to update the data structure, while user-ret will be added to the user-ret sequence
|
||||||
|
in the final return. replace-in is useful for situations where you need to know the specific values
|
||||||
|
of what was updated in the data structure."
|
||||||
(let [state (mutable-cell nil)]
|
(let [state (mutable-cell nil)]
|
||||||
[(update selector
|
[(update selector
|
||||||
(fn [e]
|
(fn [e]
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue