PageRenderTime 47ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/src/engulf/database.clj

https://github.com/andrewvc/engulf
Clojure | 67 lines | 59 code | 8 blank | 0 comment | 2 complexity | 4f4b3d983f9a05d6b077dc6e63376c67 MD5 | raw file
  1. (ns engulf.database
  2. (:require [engulf.formula :as forumla]
  3. [engulf.settings :as settings]
  4. [engulf.utils :as utils]
  5. [cheshire.core :as json]
  6. [clojure.java.jdbc :as jdbc]
  7. [clojure.walk :as walk])
  8. (:use korma.db korma.core)
  9. (:import java.util.UUID))
  10. (defn connect
  11. "Connect to the db specified in settings"
  12. []
  13. (defdb db (assoc (:jdbc settings/all)
  14. :naming {:entity (partial jdbc/as-quoted-str \`)
  15. :fields #(.replace ^String % "-" "_")
  16. :keyword #(.replace ^String % "-" "_") })))
  17. (defn- dash-keys
  18. "Convert underscores in a record map's keys into dashes"
  19. [records]
  20. (letfn [(kdasherize [s] (keyword (.replaceAll (name s) "_" "-")))
  21. (fmt-kv [[k v]] [(kdasherize k) v])
  22. (remap [m] (into {} (map fmt-kv m)))]
  23. (if (map? records)
  24. (remap records)
  25. (map remap records)) ))
  26. (defn- serialize-record-params
  27. [{:keys [params last-result] :as record}]
  28. (reduce
  29. (fn [m [k v]]
  30. (condp = k
  31. :params (assoc m k (json/generate-string v))
  32. :last-result (assoc m k (json/generate-string v))
  33. (assoc m k v)))
  34. {}
  35. record))
  36. (defn- deserialize-record-params
  37. [records]
  38. (letfn [(deserialize [record]
  39. (-> record
  40. (update-in [:params] (comp walk/keywordize-keys json/parse-string))
  41. (update-in [:last-result] json/parse-string)))]
  42. (if (map? records)
  43. (deserialize records)
  44. (map deserialize records) )))
  45. (defn- serialize-record-value
  46. [record]
  47. (update-in record [:value] json/generate-string))
  48. (defn- deserialize-record-value
  49. [record]
  50. (update-in record [:value] json/parse-string))
  51. (defentity results
  52. (pk :uuid)
  53. (prepare serialize-record-value)
  54. (transform (comp deserialize-record-value dash-keys)))
  55. (defentity jobs
  56. (pk :uuid)
  57. (prepare serialize-record-params)
  58. (transform (comp deserialize-record-params dash-keys))
  59. (has-many results {:fk :job_uuid}))