diff options
Diffstat (limited to 'aconf/persistence/backends/volatile.lua')
-rw-r--r-- | aconf/persistence/backends/volatile.lua | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/aconf/persistence/backends/volatile.lua b/aconf/persistence/backends/volatile.lua new file mode 100644 index 0000000..7016a9b --- /dev/null +++ b/aconf/persistence/backends/volatile.lua @@ -0,0 +1,46 @@ +--[[ +Copyright (c) 2012-2014 Kaarle Ritvanen +See LICENSE file for license details +--]] + +local util = require('aconf.util') + + +local backend = require('aconf.object').class() + +function backend:init(data) self.data = data or {} end + +function backend:_get(path) + local res = self.data + for _, comp in ipairs(path) do + if res == nil then return end + assert(type(res) == 'table') + res = res[comp] + end + return res +end + +function backend:get(path, top) + local res = self:_get(path) + return type(res) == 'table' and util.keys(res) or res +end + +function backend:_set(path, value) + if type(value) == 'table' then value = {} end + + if #path == 0 then self.data = value + + else + local comps = util.copy(path) + local name = comps[#comps] + table.remove(comps) + self:_get(comps)[name] = value + end +end + +function backend:set(mods) + for _, mod in ipairs(mods) do self:_set(unpack(mod)) end +end + + +return backend |