<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link rel="stylesheet" href="../../coverage.css"/> <title> clj_activitypub/internal/thread_cache.clj </title> </head> <body> <span class="covered" title="1 out of 1 forms covered"> 001 (ns clj-activitypub.internal.thread-cache </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 002 "copied from [Jahfer's clj-activitypub library](https://github.com/jahfer/clj-activitypub). </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 003 If and when Jahfer issues a release of that library, this directory will be deleted and a </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 004 dependency on that library will be added to the project.") </span><br/> <span class="blank" title="0 out of 0 forms covered"> 005 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 006 (defn- current-time </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 007 "Returns current time using UNIX epoch." </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 008 [] </span><br/> <span class="covered" title="1 out of 1 forms covered"> 009 (System/currentTimeMillis)) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 010 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 011 (defn- update-read-at [store k v] </span><br/> <span class="covered" title="2 out of 2 forms covered"> 012 (dosync </span><br/> <span class="covered" title="5 out of 5 forms covered"> 013 (commute store assoc k </span><br/> <span class="covered" title="7 out of 7 forms covered"> 014 (merge v {:read-at (current-time)})))) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 015 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 016 (defn make </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 017 "Creates a thread-local cache." </span><br/> <span class="covered" title="3 out of 3 forms covered"> 018 ([] (make false)) </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 019 ([cache-if-nil] </span><br/> <span class="covered" title="4 out of 4 forms covered"> 020 (let [store (ref {})] </span><br/> <span class="covered" title="1 out of 1 forms covered"> 021 (letfn [(cache-kv ([k v] </span><br/> <span class="covered" title="2 out of 2 forms covered"> 022 (dosync </span><br/> <span class="covered" title="5 out of 5 forms covered"> 023 (commute store assoc k </span><br/> <span class="covered" title="6 out of 6 forms covered"> 024 {:write-at (current-time) </span><br/> <span class="covered" title="2 out of 2 forms covered"> 025 :read-at (current-time) </span><br/> <span class="covered" title="1 out of 1 forms covered"> 026 :value v}) </span><br/> <span class="covered" title="1 out of 1 forms covered"> 027 v))) </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 028 (get-v ([k] </span><br/> <span class="covered" title="11 out of 11 forms covered"> 029 (when-let [data (get @store k)] </span><br/> <span class="covered" title="5 out of 5 forms covered"> 030 (update-read-at store k data) </span><br/> <span class="covered" title="3 out of 3 forms covered"> 031 (:value data))) </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 032 ([k compute-fn] </span><br/> <span class="covered" title="4 out of 4 forms covered"> 033 (let [storage @store] </span><br/> <span class="covered" title="5 out of 5 forms covered"> 034 (if (contains? storage k) </span><br/> <span class="covered" title="3 out of 3 forms covered"> 035 (get-v k) </span><br/> <span class="covered" title="3 out of 3 forms covered"> 036 (let [v (compute-fn)] </span><br/> <span class="partial" title="11 out of 12 forms covered"> 037 (when (or (not (nil? v)) cache-if-nil) </span><br/> <span class="covered" title="4 out of 4 forms covered"> 038 (cache-kv k v) </span><br/> <span class="covered" title="3 out of 3 forms covered"> 039 (get-v k))))))) </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 040 (lru ([] </span><br/> <span class="not-covered" title="0 out of 2 forms covered"> 041 (mapv </span><br/> <span class="not-covered" title="0 out of 6 forms covered"> 042 (fn [[k v]] [k (:value v)]) </span><br/> <span class="not-covered" title="0 out of 12 forms covered"> 043 (sort-by #(-> % val :read-at) < @store))))] </span><br/> <span class="covered" title="6 out of 6 forms covered"> 044 {:cache-kv cache-kv </span><br/> <span class="covered" title="1 out of 1 forms covered"> 045 :get-v get-v </span><br/> <span class="covered" title="1 out of 1 forms covered"> 046 :cache-if-nil cache-if-nil </span><br/> <span class="covered" title="1 out of 1 forms covered"> 047 :lru lru})))) </span><br/> </body> </html>