Skip to content

Commit

Permalink
file db stuff
Browse files Browse the repository at this point in the history
  • Loading branch information
bsteuber committed Jul 8, 2011
1 parent 07c78c1 commit 3aa2e19
Showing 1 changed file with 40 additions and 0 deletions.
40 changes: 40 additions & 0 deletions src/libs/db.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
(ns libs.db
(:use (libs app io maps)))

(defn app-db
([path] (app-db path {}))
([path defaults]
(agent defaults
:meta {:db :file
:file (app-file path)
:defaults defaults})))

(defn get* [db & path]
(get-in @db path))

(defn set* [db & args]
(let [value (last args)
path (butlast args)]
(send db assoc-in path value)))

(def db-type (comp :db meta))

(defmulti read-db db-type)
(defmulti write-db db-type)

(defn clear-db [db]
(send db (fn [_] (:defaults (meta db)))))

(defmethod read-db :file [db]
(let [{:keys [file defaults]} (meta db)]
(send db
(constantly
(patch-map
defaults
(deserialize file))))))

(defmethod write-db :file [db]
(let [{:keys [file defaults]} (meta db)]
(serialize file
(diff-map @db
defaults))))

0 comments on commit 3aa2e19

Please sign in to comment.