diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2016-12-29 16:16:47 +0200 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2017-01-06 11:10:53 +0200 |
commit | 76b4d37fec67081228dcedcaf2b70d2b48b544c4 (patch) | |
tree | 8071393ec122cd5ec1f17d18068f4eb7018baf05 /aconf/model/node.lua | |
parent | c5abfdf7dbcb421b35cf0a0297ee90982704828b (diff) | |
download | aconf-76b4d37fec67081228dcedcaf2b70d2b48b544c4.tar.bz2 aconf-76b4d37fec67081228dcedcaf2b70d2b48b544c4.tar.xz |
model: optimize fetching of collection members
avoid unnecessary initialization of collection metadata
Diffstat (limited to 'aconf/model/node.lua')
-rw-r--r-- | aconf/model/node.lua | 35 |
1 files changed, 16 insertions, 19 deletions
diff --git a/aconf/model/node.lua b/aconf/model/node.lua index 70aa4fc..b3a5ab0 100644 --- a/aconf/model/node.lua +++ b/aconf/model/node.lua @@ -1,5 +1,5 @@ --[[ -Copyright (c) 2012-2016 Kaarle Ritvanen +Copyright (c) 2012-2017 Kaarle Ritvanen See LICENSE file for license details --]] @@ -244,14 +244,8 @@ function M.TreeNode:init(context, params) function mt.meta() if not mt._meta then - mt._meta = {type=params.dtype} - if mt.txn then - if mt.parent then - mt._meta['ui-name'] = - getmetatable(mt.parent).mmeta(mt.name)['ui-name'] - end - mt.init_meta(mt._meta) - end + mt._meta = {type=params.dtype, ['ui-name']=mt.ui_name} + if mt.txn then mt.init_meta(mt._meta) end end local res = copy(mt._meta) @@ -264,6 +258,8 @@ function M.TreeNode:init(context, params) if not mt.txn then return end + mt.ui_name = mt.parent and getmetatable(mt.parent).member_ui_name(mt.name) + function mt.save(k, v) rawset(self, k, v) end function mt.__index(t, k) return mt.get(k, {private=true}) end function mt.__newindex(t, k, v) mt.save(k, v) end @@ -302,6 +298,16 @@ function M.Collection:init(context, params) if not mt.txn then return end + mt.ui_member = params.ui_member or mt.ui_name:gsub('s$', '') + + function mt.member_ui_name(name) + return name ~= pth.wildcard and mt.ui_member..' '..name or nil + end + + function mt.mmeta(name) + return update(mt.field:meta(), {['ui-name']=mt.member_ui_name(name)}) + end + function mt.init_meta(meta) update( meta, @@ -309,21 +315,12 @@ function M.Collection:init(context, params) editable=params.editable and mt.has_permission('create'), members=mt.field:meta(), required=params.required, - ['ui-member']=params.ui_member or meta['ui-name']:gsub('s$', ''), + ['ui-member']=mt.ui_member, widget=params.layout } ) end - function mt.mmeta(name) - local meta = mt.meta() - local res = copy(meta.members) - if name ~= pth.wildcard then - res['ui-name'] = meta['ui-member']..' '..name - end - return res - end - local function validate_key(k) if params.key then local kf = M.BoundMember(self, k, object.toinstance(params.key)) |