summaryrefslogtreecommitdiffstats
path: root/aconf/model/init.lua
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2015-01-30 00:09:23 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2015-01-30 00:09:46 +0200
commit07a0eb180872401b271de40190603df8f3ab3db2 (patch)
tree35de2598fc5013946b2ddefcd9d613f6d4a5fabe /aconf/model/init.lua
parent23d685c951cb52c5a895acda5fca3390eda49c80 (diff)
downloadaconf-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.lua43
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