/
edb.clj
74 lines (73 loc) · 2.6 KB
/
edb.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
(ns keechma.toolbox.edb)
(defmacro defentitydb [schema]
(let [getter-fns
[:get-item-by-id
:get-named-item
:get-item-meta
:get-named-item-meta
:get-collection-meta]
getter-ensure-layout-fns
[:get-collection]
mutate-fns
[:insert-meta
:remove-meta
:remove-named-item
:remove-collection
:empty-collection
:remove-related-collection
:vacuum]
mutate-with-schema-fns
[:insert-item
:insert-named-item
:insert-collection
:append-collection
:prepend-collection
:remove-item
:insert-related-collection
:append-related-collection
:prepend-related-collection]]
`(do
~@(for [fn-name getter-ensure-layout-fns]
(let [db-sym (gensym "db")
rest-sym (gensym "rest")]
`(def ~(symbol (name fn-name))
(fn [~db-sym & ~rest-sym]
(apply
(partial
(~(symbol "entitydb.util" "ensure-layout") ~(symbol "entitydb.core" (name fn-name)))
~schema)
(concat [(:entity-db ~db-sym)] ~rest-sym))))))
~@(for [fn-name getter-fns]
(let [db-sym (gensym "db")
rest-sym (gensym "rest")]
`(def ~(symbol (name fn-name))
(fn [~db-sym & ~rest-sym]
(apply
(partial
~(symbol "entitydb.core" (name fn-name))
~schema)
(concat [(:entity-db ~db-sym)] ~rest-sym))))))
~@(for [fn-name mutate-with-schema-fns]
(let [db-sym (gensym "db")
rest-sym (gensym "rest")]
`(def ~(symbol (name fn-name))
(fn [~db-sym & ~rest-sym]
(assoc
~db-sym
:entity-db
(apply
(partial
(~(symbol "entitydb.util" "ensure-layout") ~(symbol "entitydb.core" (name fn-name)))
~schema)
(concat [(:entity-db ~db-sym)] ~rest-sym)))))))
~@(for [fn-name mutate-fns]
(let [db-sym (gensym "db")
rest-sym (gensym "rest")]
`(def ~(symbol (name fn-name))
(fn [~db-sym & ~rest-sym]
(assoc
~db-sym
:entity-db
(apply
~(symbol "entitydb.core" (name fn-name))
(concat [(:entity-db ~db-sym)] ~rest-sym))))))))))