proletariat.core
conj-when
(conj-when coll f x)Conjoins x to coll per the predicate f, otherwise returns coll unchanged.
conjv
(conjv coll x)Add element x to a vectorized version of coll and return the new vector
deep-merge
(deep-merge & maps)Performs a deep merge on maps, resolves conflicts by choosing the last value. See deep-merge-with for custom conflict resolution.
deep-merge-with
(deep-merge-with func & maps)Performs a deep merge on maps using func to resolve conflicts.
dofor
macro
(dofor seq-exprs & body)Behaves like a combination of clojure.core/for and clojure.core/doseq. Intended for side-effects, but will return a realized seq of the results. Has the following behaviors:
- Not-lazy, will cause the entire seq to reside in memory at one time
- Supports the
formodifers :let, :while, :when - wraps
bodyin an implicit do (unlikefor) - returns a seq of the results from each iteration (unlike
doseq)
Unlike for or doseq, provides support for Hara Events, by catching any exceptions and instead using event/raise with name :exception and map containing a single element :e with the exception that was thrown. This allows users to leverage all of Hara Event’s utilities for managing Exceptions via conditional restarts (eg: using on/continue to provide a default in the event of an exception)
flatten-map
(flatten-map m)Takes a map, possibly nested, and ‘flattens’ it by removing any nesting and placing all keys in the root map. Any keys that refer to nested maps will be removed. Duplicate keys will be overwritten based on the order of reduce, where later keys will overwrite earlier keys.
get-zipper-path
(get-zipper-path loc)Returns the path of a location in a zipper. loc should not be a node.
group-by-with
(group-by-with f bucket coll)Like clojure.core/group-by except adds an additional parameter allowing the user to specify the collection that will be used for collecting the grouped items instead of defaulting to vector.
interruptable
macro
(interruptable f & body)Wrapper for catching InterruptedException and running the provided function. The function will receive the exception as input and the response will be returned to the caller.
interruptable->ex
macro
(interruptable->ex m & body)Wrapper for catching InterruptedException and returning an ExceptionInfo with provided map m as data.
keep-sc
(keep-sc f messages)(keep-sc f messages exp)Works like clojure.core/keep except will short circuit if an exception is thrown by the processing function and return the list of results processed prior to the exception. Optional arity allows the user to pass in a (atom nil) which will be reset! with the exception that was thrown. Note: since map-sc is lazy, the atom will not contain the exception until the sequence is realized.
Has same performance enhancement for chunked-seq’s as clojure.core/keep but will guarantee that no elements after the exception will be processed even if in the middle of a chunk when the exception is thrown.
map-sc
(map-sc f messages)(map-sc f messages exp)Works like clojure.core/map except will short circuit if an exception is thrown by the processing function and return the list of results processed prior to the exception. Optional arity allows the user to pass in a (atom nil) which will be reset! with the exception that was thrown. Note: since map-sc is lazy, the atom will not contain the exception until the sequence is realized.
Has same performance enhancement for chunked-seq’s as clojure.core/map but will guarantee that no elements after the exception will be processed even if in the middle of a chunk when the exception is thrown.
named?
(named? x)Returns true if x is a namespaced keyword (an instance of clojure.lang.Named.
read-edn-resource
(read-edn-resource fd)(read-edn-resource opts fd)Works like clojure.edn/read-string except reads the EDN from a classpath resource with the given file descriptor fd instead of a passed in string.
remove-nil-values
(remove-nil-values m)Removes elements from a map that have nil values; does not recurse
remove-nils
(remove-nils nm)Removes elements from a (possibly nested) map that have nil values. Returns nil if all values in the map are nil Src: http://stackoverflow.com/a/29363255
retry
macro
(retry n & body)Will execute body and return the result. If an exception is thrown, will retry n times (making total executions n + 1 times). If all retries are exhausted, the final exception is thrown.
retry*
(retry* n thunk)(retry* n thunk on-retry)(retry* n thunk on-retry on-fail)By default, will execute thunk and return the result. If an exception is thrown, will retry n times (making total executions n + 1 times). If all retries are exhausted, the final exception is thrown. Optional arities are provided for customization.
Args
n - the number of times to retry. If < 0, will retry indefinitely thunk - no-arg function to execute and catch any exceptions for retry on-retry - (optional arity) function that is called prior to the retry when an exception is thrown, but there are still retries available. Default is a no-op. The function takes 2 arguments: first is the number of times retried (first retry will be 0, second will be 1, etc) and the second is the exception that was thrown. It is presumed that this funciton is for side effects (eg: logging) and any result will be ignored. on-fail - (optional arity) function that is called after all retries have been exhausted. The result of this function will be returned as the final result of retry*. The default is to throw the final exception. The function takes 1 argument: the final exception.
Note: if an exception is thrown from either on-retry or on-fail processing will stop immediately and that exception thrown, with no further retries.
retry-backoff
macro
(retry-backoff n b & body)Will execute body and return the result. If an exception is thrown, will sleep for previous retries * b milliseconds and then retry up to n times (making total executions n + 1 times). The first retry will not sleep, the second will sleep for b milliseconds and subsequent retries will sleep for retries * b milliseconds. If all retries are exhausted, the final exception is thrown. Can throw InterruptedExcpetion if the processing thread is interupted during a backoff sleep.
slurp-resource
(slurp-resource fd & opts)Works like clojure.core/slurp except it resolves the resource file descriptor fd relative to the classpath instead of the file system.
sreduce
(sreduce f acc state coll)Works like reduce, but also allows functional state to be passed and returned between iterations. f should be a function of three arguments: the accumulator, the next value, and the state. acc is an accumulator that will be the final return value. state is the starting state of the reduction. coll is the collection to iterate.
to-clj-instant
(to-clj-instant jtime-instant)Creates a clojure instant literal a given java.time.Instant
whoami
(whoami)(whoami default)Runs whoami on the OS and returns the user that owns the JVM process. Only for Linux based systems. Optional arity as default in case of failure.