From bc1689c28354efc0968bdd3847d0e011fcb84b88 Mon Sep 17 00:00:00 2001 From: Kaarle Ritvanen Date: Tue, 15 Apr 2014 23:45:19 +0300 Subject: model: 'pairs' and 'ipairs' metamethods for TreeNode instances --- aconf/model/aaa.lua | 2 +- aconf/model/field.lua | 2 +- aconf/model/init.lua | 2 +- aconf/model/node.lua | 21 ++++++++++----------- aconf/model/set.lua | 2 +- aconf/modules/network.lua | 4 ++-- server.lua | 2 +- 7 files changed, 17 insertions(+), 18 deletions(-) diff --git a/aconf/model/aaa.lua b/aconf/model/aaa.lua index 203b85c..c642984 100644 --- a/aconf/model/aaa.lua +++ b/aconf/model/aaa.lua @@ -90,7 +90,7 @@ Aaa.action_log = M.List{type=Record, addr=node.null_addr, visible=false} function Aaa:validate() local time = os.time() - for _, action in node.pairs(self.action_log) do + for _, action in pairs(self.action_log) do action.timestamp = time node.insert(self.audit_trail, action) end diff --git a/aconf/model/field.lua b/aconf/model/field.lua index cf14909..ca6bc1d 100644 --- a/aconf/model/field.lua +++ b/aconf/model/field.lua @@ -361,7 +361,7 @@ function M.TreeNode:save(context, value) local new = self:load(context, {create=true}) local errors = err.ErrorDict() - for k, v in node.pairs(value) do + for k, v in pairs(value) do errors:collect(self.save_member, new, k, v) end errors:raise() diff --git a/aconf/model/init.lua b/aconf/model/init.lua index cab92e7..881acea 100644 --- a/aconf/model/init.lua +++ b/aconf/model/init.lua @@ -102,7 +102,7 @@ function M.Reference:_choice(context) ) assert(isinstance(obj, node.Collection)) - for k, v in node.pairs(obj) do + for k, v in pairs(obj) do local ch = {enabled=true} if isinstance(v, node.TreeNode) then diff --git a/aconf/model/node.lua b/aconf/model/node.lua index bdf8311..b4fd685 100644 --- a/aconf/model/node.lua +++ b/aconf/model/node.lua @@ -66,6 +66,7 @@ function M.TreeNode:init(context, params) mt.name = pth.name(mt.path) mt.__eq = equal_tns + mt.__pairs = M.pairs if not (mt.txn and mt.txn.user) then mt.privileged = true end mt.escalate = mt.privileged and self or mt.class( @@ -343,6 +344,13 @@ end M.List = class(M.Collection) +local function _ipairs(mt, i) + i = i + 1 + local v = mt.load(i, {create=false}) + if v == nil then return end + return i, v +end + function M.List:init(context, params) super(self, M.List):init(context, setdefaults(params, {dtype='list'})) @@ -390,6 +398,8 @@ function M.List:init(context, params) end tmt._save(i, v) end + + function mt.__ipairs(t) return _ipairs, mt, 0 end end @@ -446,16 +456,5 @@ function M.pairs(tbl, dereference) return pairs(res) end -local function _ipairs(mt, i) - i = i + 1 - local v = mt.load(i, {create=false}) - if v == nil then return end - return i, v -end -function M.ipairs(tbl) - if not isinstance(tbl, M.TreeNode) then return ipairs(tbl) end - return _ipairs, getmetatable(tbl), 0 -end - return M diff --git a/aconf/model/set.lua b/aconf/model/set.lua index 9b37ea0..ac8904b 100644 --- a/aconf/model/set.lua +++ b/aconf/model/set.lua @@ -27,7 +27,7 @@ function M.Set:init(context, params) self, pth.wildcard, params.field ):normalize(value) - for i, member in node.pairs(self) do + for i, member in pairs(self) do if member == value then return i, value end end end diff --git a/aconf/modules/network.lua b/aconf/modules/network.lua index 34b4064..188ac28 100644 --- a/aconf/modules/network.lua +++ b/aconf/modules/network.lua @@ -93,7 +93,7 @@ end function Interface:is_removable() return self.class == 'logical' end function Interface:auto_set() - for _, set in M.node.ipairs(self:fetch('../../enabled-ifaces')) do + for _, set in ipairs(self:fetch('../../enabled-ifaces')) do if M.node.contains(set, self) then return set end end end @@ -154,7 +154,7 @@ Interface.status = M.String{ compute=function(obj) if obj.class == 'loopback' then return 'attached' end - for _, iface in M.node.pairs(M.node.parent(obj)) do + for _, iface in pairs(M.node.parent(obj)) do if ( iface.type == 'bond' and M.node.contains(iface.slaves, obj) ) or ( diff --git a/server.lua b/server.lua index 5a3f081..0d28200 100644 --- a/server.lua +++ b/server.lua @@ -190,7 +190,7 @@ return function(env) if isinstance(obj, mnode.TreeNode) then local node = {} - for k, v in mnode.pairs(obj) do + for k, v in pairs(obj) do local readable = true if isinstance(v, mnode.TreeNode) then -- cgit v1.2.3