diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2015-01-30 00:09:23 +0200 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2015-01-30 00:09:46 +0200 |
commit | 07a0eb180872401b271de40190603df8f3ab3db2 (patch) | |
tree | 35de2598fc5013946b2ddefcd9d613f6d4a5fabe /aconf/model/init.lua | |
parent | 23d685c951cb52c5a895acda5fca3390eda49c80 (diff) | |
download | aconf-07a0eb180872401b271de40190603df8f3ab3db2.tar.bz2 aconf-07a0eb180872401b271de40190603df8f3ab3db2.tar.xz |
specify search pattern for references
Diffstat (limited to 'aconf/model/init.lua')
-rw-r--r-- | aconf/model/init.lua | 43 |
1 files changed, 24 insertions, 19 deletions
diff --git a/aconf/model/init.lua b/aconf/model/init.lua index 663c7f8..01b4791 100644 --- a/aconf/model/init.lua +++ b/aconf/model/init.lua @@ -74,7 +74,8 @@ M.Reference = class(Field) function M.Reference:init(params) super(self, M.Reference):init( util.setdefaults( - params, {on_delete='restrict', scope='/', widget='reference'} + params, + {on_delete='restrict', scope='/', search='*', widget='reference'} ) ) self.dtype = 'reference' @@ -84,7 +85,7 @@ end function M.Reference:topology(context) local res = super(self, M.Reference):topology(context) - res[1].scope = self.scope + update(res[1], {scope=self.scope, search=self.search}) return res end @@ -92,34 +93,38 @@ function M.Reference:abs_scope(context) return M.path.to_absolute(self.scope, node.path(context.parent)) end --- assume one-level refs for now function M.Reference:_choice(context) local res = {} + local onelevel = self.search == '*' - local obj = relabel( - 'system', node.fetch, context.parent, self:abs_scope(context) - ) - assert(isinstance(obj, node.Collection)) + local obj = relabel('system', node.fetch, context.parent, self.scope) + assert(isinstance(obj, node.TreeNode)) - for k, v in pairs(obj) do + for _, v in ipairs(node.search(obj, self.search)) do local ch = {enabled=true} - if isinstance(v, node.TreeNode) then - ch.ref = node.path(v) - if M.path.is_subordinate(context.path, ch.ref) then ch = nil end - if ch then - ch['ui-value'] = M.path.name(ch.ref) - ch.be_value = M.path.escape(ch['ui-value']) - ch.value = self.dereference and ch.ref or ch.be_value + if isinstance(v.value, node.TreeNode) then + ch.ref = node.path(v.value) + if M.path.is_subordinate(context.path, ch.ref) then ch = nil + else + update( + ch, + { + be_value=v.path, + value=self.dereference and ch.ref or v.path, + ['ui-value']=onelevel and M.path.name(v.path) or v.path + } + ) if self.filter then - assert(isinstance(v, model.Model)) - if not v:match(self.filter) then ch.enabled = false end + assert(isinstance(v.value, model.Model)) + if not v.value:match(self.filter) then ch.enabled = false end end end else - local ep = M.path.escape(v) - update(ch, {be_value=ep, value=ep, ['ui-value']=v}) + assert(onelevel) + local ep = M.path.escape(v.value) + update(ch, {be_value=ep, value=ep, ['ui-value']=v.value}) end if ch then table.insert(res, ch) end |