diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-10-15 18:34:39 +0300 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-10-15 21:40:17 +0300 |
commit | 36c41b8bf5fef1ecd77c6bad1f882eccff959db4 (patch) | |
tree | cf6ca9dd04629ce2959de6c0e39a290527790e7f /acf2/persistence | |
parent | 90177cda6335db5f08cb692f8981993ef51b4ee4 (diff) | |
download | acf2-36c41b8bf5fef1ecd77c6bad1f882eccff959db4.tar.bz2 acf2-36c41b8bf5fef1ecd77c6bad1f882eccff959db4.tar.xz |
reload service configuration on commit
Diffstat (limited to 'acf2/persistence')
-rw-r--r-- | acf2/persistence/init.lua | 21 |
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 |