diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2015-02-21 15:01:36 +0200 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2015-02-21 15:08:18 +0200 |
commit | 30ea327005ed2f45e19b2314b8caaae3c7edd894 (patch) | |
tree | f3ddfcf58e488080ad4d7c21b1e2d3b4d9b5296f /aconf/model/node.lua | |
parent | 174f24cfc838de64f6c2e104ca236517363e2b93 (diff) | |
download | aconf-30ea327005ed2f45e19b2314b8caaae3c7edd894.tar.bz2 aconf-30ea327005ed2f45e19b2314b8caaae3c7edd894.tar.xz |
model: cache member context
Diffstat (limited to 'aconf/model/node.lua')
-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) |