From 36c41b8bf5fef1ecd77c6bad1f882eccff959db4 Mon Sep 17 00:00:00 2001 From: Kaarle Ritvanen Date: Tue, 15 Oct 2013 18:34:39 +0300 Subject: reload service configuration on commit --- acf2/persistence/init.lua | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'acf2/persistence') 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 -- cgit v1.2.3