From e9b0c64eeb8995de249c02c0bcb34c37d674d06f Mon Sep 17 00:00:00 2001 From: Kaarle Ritvanen Date: Mon, 17 Mar 2014 22:11:45 +0200 Subject: model: removable in model metadata --- aconf/model/model.lua | 12 +++++++++--- aconf/model/node.lua | 20 +++++++------------- 2 files changed, 16 insertions(+), 16 deletions(-) (limited to 'aconf/model') 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) -- cgit v1.2.3