<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link rel="stylesheet" href="../../../coverage.css"/> <title> cc/journeyman/the_great_game/utils.clj </title> </head> <body> <span class="covered" title="1 out of 1 forms covered"> 001 (ns cc.journeyman.the-great-game.utils) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 002 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 003 (defn cyclic? </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 004 "True if two or more elements of `route` are identical" </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 005 [route] </span><br/> <span class="covered" title="8 out of 8 forms covered"> 006 (not= (count route)(count (set route)))) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 007 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 008 (defn deep-merge </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 009 "Recursively merges maps. Stolen from </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 010 https://dnaeon.github.io/recursively-merging-maps-in-clojure/" </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 011 [& maps] </span><br/> <span class="covered" title="1 out of 1 forms covered"> 012 (letfn [(m [& xs] </span><br/> <span class="covered" title="17 out of 17 forms covered"> 013 (if (some #(and (map? %) (not (record? %))) xs) </span><br/> <span class="covered" title="5 out of 5 forms covered"> 014 (apply merge-with m xs) </span><br/> <span class="covered" title="3 out of 3 forms covered"> 015 (last xs)))] </span><br/> <span class="covered" title="4 out of 4 forms covered"> 016 (reduce m maps))) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 017 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 018 (defn make-target-filter </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 019 "Construct a filter which, when applied to a list of maps, </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 020 will pass those which match these `targets`, where each target </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 021 is a tuple [key value]." </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 022 ;; TODO: this would probably be more elegant as a macro </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 023 [targets] </span><br/> <span class="covered" title="2 out of 2 forms covered"> 024 (eval </span><br/> <span class="covered" title="3 out of 3 forms covered"> 025 (list </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 026 'fn </span><br/> <span class="covered" title="3 out of 3 forms covered"> 027 (vector 'm) </span><br/> <span class="covered" title="3 out of 3 forms covered"> 028 (cons </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 029 'and </span><br/> <span class="covered" title="3 out of 3 forms covered"> 030 (map </span><br/> <span class="covered" title="3 out of 3 forms covered"> 031 #(list </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 032 '= </span><br/> <span class="covered" title="6 out of 6 forms covered"> 033 (list (first %) 'm) </span><br/> <span class="covered" title="3 out of 3 forms covered"> 034 (nth % 1)) </span><br/> <span class="covered" title="1 out of 1 forms covered"> 035 targets))))) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 036 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 037 (defn value-or-default </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 038 "Return the value of this key `k` in this map `m`, or this `dflt` value if </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 039 there is none." </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 040 [m k dflt] </span><br/> <span class="not-covered" title="0 out of 13 forms covered"> 041 (or (when (map? m) (m k)) dflt)) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 042 </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 043 ;; (value-or-default {:x 0 :y 0 :altitude 7} :altitude 8) </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 044 ;; (value-or-default {:x 0 :y 0 :altitude 7} :alt 8) </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 045 ;; (value-or-default nil :altitude 8) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 046 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 047 (defn truthy? </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 048 "Returns `true` unless `val` is `nil`, `false` or an empty sequence. </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 049 Otherwise always 'false'; never any other value." </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 050 [val] </span><br/> <span class="covered" title="11 out of 11 forms covered"> 051 (and (or val false) true)) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 052 </span><br/> <span class="blank" title="0 out of 0 forms covered"> 053 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 054 (defn inc-or-one </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 055 "If this `val` is a number, return that number incremented by one; otherwise, </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 056 return 1. TODO: should probably be in `utils`." </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 057 [val] </span><br/> <span class="covered" title="2 out of 2 forms covered"> 058 (if </span><br/> <span class="covered" title="3 out of 3 forms covered"> 059 (number? val) </span><br/> <span class="not-covered" title="0 out of 2 forms covered"> 060 (inc val) </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 061 1)) </span><br/> </body> </html>