/
callbacks.clj
45 lines (34 loc) · 1.3 KB
/
callbacks.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
(ns datumbazo.callbacks
(:require [inflections.core :as infl]))
(defmacro defcallback
"Define a record callback."
[callback doc]
(let [protocol (symbol (str "I" (infl/camel-case callback)))]
`(do (defprotocol ~protocol
(~callback [~'record] ~doc))
(extend-type java.lang.Object
~protocol
(~callback [~'record] ~'record))
(defn ~(symbol (str "call-" callback))
[~'records]
(mapv #(~callback %) ~'records)))))
(defcallback after-create
"Called after a record has been created in the database.")
(defcallback after-delete
"Called after a record has been deleted from the database.")
(defcallback after-initialize
"Called after initializing a record.")
(defcallback after-find
"Called after a record has been found in the database.")
(defcallback after-save
"Called after a record has been saved to the database.")
(defcallback after-update
"Called after a record has been updated in the database.")
(defcallback before-create
"Called before a record is created in the database.")
(defcallback before-delete
"Called before a record is deleted from the database.")
(defcallback before-save
"Called before a record is saved to the database.")
(defcallback before-update
"Called before a record is updated in the database.")