summaryrefslogtreecommitdiffstats
path: root/aconf/model
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2014-03-17 22:11:45 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2014-03-25 09:02:57 +0200
commite9b0c64eeb8995de249c02c0bcb34c37d674d06f (patch)
tree702b36446ceb98b59872342944fdf34daa683b0e /aconf/model
parent6de3c67c536be18cf8074040f24181f1823b1295 (diff)
downloadaconf-e9b0c64eeb8995de249c02c0bcb34c37d674d06f.tar.bz2
aconf-e9b0c64eeb8995de249c02c0bcb34c37d674d06f.tar.xz
model: removable in model metadata
Diffstat (limited to 'aconf/model')
-rw-r--r--aconf/model/model.lua12
-rw-r--r--aconf/model/node.lua20
2 files changed, 16 insertions, 16 deletions
diff --git a/aconf/model/model.lua b/aconf/model/model.lua
index 7ce3060..e71e73c 100644
--- a/aconf/model/model.lua
+++ b/aconf/model/model.lua
@@ -177,6 +177,11 @@ function M.Model:init(context)
function mt.removable() return self:is_removable() end
end
+ local value_removable = mt.value_removable
+ function mt.value_removable(v)
+ return type(v) == 'table' and value_removable(v)
+ end
+
if not mt.txn then return end
@@ -184,8 +189,9 @@ function M.Model:init(context)
function mt.save(k, v)
k = normalize_name(k)
- mt.check_removable(k, v)
- return mt.member(k, false, Field):save(v)
+ local field = mt.member(k, false, Field)
+ if isinstance(field, fld.TreeNode) then mt.check_removable(k, v) end
+ return field:save(v)
end
local function tmeta(tpe)
@@ -197,7 +203,7 @@ function M.Model:init(context)
end
function mt.members()
- return map(function(f) return f.name end, mt.meta().fields)
+ return map(function(f) return f.name end, tmeta(Field))
end
function mt.validate()
diff --git a/aconf/model/node.lua b/aconf/model/node.lua
index 56b05cb..327f582 100644
--- a/aconf/model/node.lua
+++ b/aconf/model/node.lua
@@ -77,7 +77,13 @@ function M.TreeNode:init(context, params)
mt.init_meta(mt._meta)
end
end
- return mt._meta
+
+ local res = copy(mt._meta)
+ res.removable = {}
+ for _, key in ipairs(mt.members()) do
+ if mt.key_removable(key) then table.insert(res.removable, key) end
+ end
+ return res
end
function mt.get(k, options) return mt.load(k, options) end
@@ -232,18 +238,6 @@ function M.Collection:init(context, params)
)
end
- local meta = mt.meta
- function mt.meta()
- local res = copy(meta())
- res.removable = {}
- for _, key in ipairs(mt.members()) do
- if mt.key_removable(key) then
- table.insert(res.removable, key)
- end
- end
- return res
- end
-
function mt.mmeta(name)
local meta = mt.meta()
local res = copy(meta.members)