add docstring to main api

This commit is contained in:
Nathan Marz 2015-04-22 11:46:13 -04:00
parent ec097f8db2
commit 5b62817bd5

View file

@ -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]