diff options
Diffstat (limited to 'aconf')
-rw-r--r-- | aconf/model/node.lua | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/aconf/model/node.lua b/aconf/model/node.lua index 2a4687c..735e7df 100644 --- a/aconf/model/node.lua +++ b/aconf/model/node.lua @@ -32,27 +32,24 @@ M.BoundMember = class() function M.BoundMember:init(parent, name, field) local pmt = getmetatable(parent) + + local addr = field.addr or address.escape(name) + if type(addr) == 'function' then addr = addr(pmt.path, name) end + + local context = { + txn=pmt.txn, + privileged=pmt.privileged, + parent=parent, + path=pth.join(pmt.path, name), + addr=address.to_absolute(addr, pmt.addr) + } + local mt = {} function mt.__index(t, k) local member = field[k] if type(member) ~= 'function' then return member end - - local addr = field.addr or address.escape(name) - if type(addr) == 'function' then addr = addr(pmt.path, name) end - return function(self, ...) - return member( - field, - { - txn=pmt.txn, - privileged=pmt.privileged, - parent=parent, - path=pth.join(pmt.path, name), - addr=address.to_absolute(addr, pmt.addr) - }, - ... - ) - end + return function(self, ...) return member(field, context, ...) end end setmetatable(self, mt) |