Liking cljdoc? Tell your friends :D

com.michaelgaare.clj-util.transform

Transformation utility functions.

  • restructure to rewrite maps
  • val-map map functions over map values
Transformation utility functions.
- `restructure` to rewrite maps
- `val-map` map functions over map values
raw docstring

dedupe-byclj

(dedupe-by f)
(dedupe-by f coll)

Like dedupe, but calls f on each item to determine the item to dedupe by, while returning the original item. Returns a transducer when no collection is provided.

Like dedupe, but calls f on each item to determine the item to dedupe
by, while returning the original item. Returns a transducer when no
collection is provided.
raw docstring

distinct-byclj

(distinct-by f)
(distinct-by f coll)

Like distinct, but calls f on each item to determine the distinct value, while returning the original un-transformed item. Returns a transducer if called without a collection argument.

Like distinct, but calls f on each item to determine the distinct
value, while returning the original un-transformed item. Returns a
transducer if called without a collection argument.
raw docstring

extract*clj

(extract* m ext target)

Runtime value extraction for restructure

Runtime value extraction for restructure
raw docstring

literalclj

(literal x)

For use in restructure, marks a value as one that should be preserved literally in the output.

For use in `restructure`, marks a value as one that should be
preserved literally in the output.
raw docstring

multi-extract-formclj

(multi-extract-form input-sym extract-m xf or-val target)

restructurecljmacro

(restructure m re-map)

Takes an input map and 'restructures' it according to re-map. Restructuring could be thought of as a sort of complement to associative destructuring. It allows you to reshape and transform the data in the input map. This is accomplished by building a map (in re-map) with the desired structure, with values that describe where to get the desired data from the input map, along with optional transforms. Keys and nested maps in re-map will be preserved. Non-map values are extractors - they specify how to retrieve and optionally transform the data from the input map. Extractors can be:

  • non-collection values, which will be treated as keys in the input map and replaced with the associated value
  • vectors, which are treated as tuples of the following-form: [extraction xform-or-val :or? default?]
    • If extraction is a vector, it will retrieve the associated value from the input map as with get-in.
    • If extraction is a map, it can be used to extract multiple values to be passed to the transform, as described below.
    • If extraction is the special-case keyword ::literal (as is the case when one calls literal) then the value of xform-or-val will be used as the literal value.
    • nil values will be passed to transforms.
    • After extraction and any xform, an :or keyword followed by a default value will be used in case of nil.
    • Otherwise it will be treated as a key, as in an extractor. The map version of extraction takes this form: {:ks [key-names-or-nested-vectors] :defaults [optional-defaults]} The values of the extracted keys will be passed, in the order specified, to the transform function. Any missing keys will have nil values. If xform function is provided, it will be called on the value to transform. If a key is missing from the input map or the supplied transformation function returns nil, it will not be included in the output map. ex: (restructure {:a 1 :b 2 :c 3 :d {:e 4}} {:bb {:cc [:a inc] :dd (literal "hi")} :ee [{:ks [:b :c]} max] :ff [{:ks [:f] :defaults [5]} inc] :gg [[:d :e]] :hh [:h :or 12] :ii [{:ks [:h]} :or 13]}) => {:bb {:cc 2, :dd "hi"} :ee 3 :ff 6 :gg 4 :hh 12 :ii 13}

Note that restructure is significantly faster when the re-map is availalbe at compile time.

Takes an input map and 'restructures' it according to re-map.
 Restructuring could be thought of as a sort of complement to
 associative destructuring. It allows you to reshape and transform
 the data in the input map.
 This is accomplished by building a map (in re-map) with the desired
 structure, with values that describe where to get the desired data
 from the input map, along with optional transforms. Keys and nested
 maps in re-map will be preserved. Non-map values are extractors -
 they specify how to retrieve and optionally transform the data from
 the input map.
 Extractors can be:
  * non-collection values, which will be treated as keys in the
    input map and replaced with the associated value
  * vectors, which are treated as tuples of the following-form:
    [extraction xform-or-val :or? default?]
    * If extraction is a vector, it will retrieve the associated
      value from the input map as with `get-in`.
    * If extraction is a map, it can be used to extract multiple
      values to be passed to the transform, as described below.
    * If extraction is the special-case keyword ::literal (as is
      the case when one calls `literal`) then the value of
      xform-or-val will be used as the literal value.
    * nil values will be passed to transforms.
    * After extraction and any xform, an :or keyword followed by
      a default value will be used in case of nil.
    * Otherwise it will be treated as a key, as in an extractor.
    The map version of extraction takes this form:
      {:ks [key-names-or-nested-vectors]
       :defaults [optional-defaults]}
    The values of the extracted keys will be passed, in the order
    specified, to the transform function. Any missing keys will
    have nil values.
 If xform function is provided, it will be called on the value to
 transform. If a key is missing from the input map or the supplied
 transformation function returns nil, it will not be included in the
 output map.
 ex:
 (restructure {:a 1 :b 2 :c 3 :d {:e 4}}
              {:bb {:cc [:a inc]
                    :dd (literal "hi")}
               :ee [{:ks [:b :c]} max]
               :ff [{:ks [:f] :defaults [5]} inc]
               :gg [[:d :e]]
               :hh [:h :or 12]
               :ii [{:ks [:h]} :or 13]})
  => {:bb {:cc 2, :dd "hi"} :ee 3 :ff 6 :gg 4 :hh 12 :ii 13}

Note that restructure is significantly faster when the re-map is
availalbe at compile time.
raw docstring

restructure*clj

(restructure* m re-map)

Runtime-only version of restructure.

Runtime-only version of restructure.
raw docstring

val-mapclj

(val-map f m)

Maps function f over the values of map m

Maps function f over the values of map m
raw docstring

cljdoc is a website building & hosting documentation for Clojure/Script libraries

× close