summaryrefslogtreecommitdiffstats
path: root/acf2/persistence
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-10-15 18:34:39 +0300
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-10-15 21:40:17 +0300
commit36c41b8bf5fef1ecd77c6bad1f882eccff959db4 (patch)
treecf6ca9dd04629ce2959de6c0e39a290527790e7f /acf2/persistence
parent90177cda6335db5f08cb692f8981993ef51b4ee4 (diff)
downloadacf2-36c41b8bf5fef1ecd77c6bad1f882eccff959db4.tar.bz2
acf2-36c41b8bf5fef1ecd77c6bad1f882eccff959db4.tar.xz
reload service configuration on commit
Diffstat (limited to 'acf2/persistence')
-rw-r--r--acf2/persistence/init.lua21
1 files changed, 20 insertions, 1 deletions
diff --git a/acf2/persistence/init.lua b/acf2/persistence/init.lua
index cd043f4..1cdea75 100644
--- a/acf2/persistence/init.lua
+++ b/acf2/persistence/init.lua
@@ -12,6 +12,7 @@ local pth = require('acf2.path')
local util = require('acf2.util')
local contains = util.contains
+local setdefault = util.setdefault
local stringy = require('stringy')
@@ -26,6 +27,12 @@ function DataStore:init()
function(m) return m() end,
loadmods('persistence/backends')
)
+ self.triggers = {}
+end
+
+function DataStore:trigger(path, func)
+ local funcs = setdefault(self.triggers, path, {})
+ if not contains(funcs, func) then table.insert(funcs, func) end
end
function DataStore:split_path(path)
@@ -76,14 +83,26 @@ end
function DataStore:_set_multiple(mods)
local bms = {}
+ local trigger = {}
for _, mod in ipairs(mods) do
local path, value = unpack(mod)
+
+ local tp = path
+ while not trigger[tp] do
+ trigger[tp] = true
+ tp = pth.parent(tp)
+ end
+
local backend, comps = self:split_path(path)
- table.insert(util.setdefault(bms, backend, {}), {comps, value})
+ table.insert(setdefault(bms, backend, {}), {comps, value})
end
for backend, bm in pairs(bms) do backend:set(bm) end
+
+ for path, _ in pairs(trigger) do
+ for _, func in ipairs(self.triggers[path] or {}) do func() end
+ end
end