summaryrefslogtreecommitdiffstats
path: root/aconf
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2014-03-17 19:43:52 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2014-03-25 09:02:57 +0200
commit0e7b11021457934dd99f764ee24359a86146e976 (patch)
tree09c4201c1d7fdb14e59fe6308c8230f2508a5931 /aconf
parentacbb01f353d7a156df33d7657f63a7c92fd9ace7 (diff)
downloadaconf-0e7b11021457934dd99f764ee24359a86146e976.tar.bz2
aconf-0e7b11021457934dd99f764ee24359a86146e976.tar.xz
model: fetch objects via metatable function when possible
Diffstat (limited to 'aconf')
-rw-r--r--aconf/model/aaa.lua2
-rw-r--r--aconf/model/field.lua4
-rw-r--r--aconf/model/init.lua9
-rw-r--r--aconf/model/node.lua3
4 files changed, 12 insertions, 6 deletions
diff --git a/aconf/model/aaa.lua b/aconf/model/aaa.lua
index e324381..1986b3b 100644
--- a/aconf/model/aaa.lua
+++ b/aconf/model/aaa.lua
@@ -57,7 +57,7 @@ function User:check_permission(permission)
if self.superuser then return true end
- assert(getmetatable(self).txn:fetch('/auth/permissions')[permission])
+ assert(self:fetch('/auth/permissions')[permission])
for _, role in M.node.pairs(self.roles, true) do
for _, p in M.node.pairs(role.permissions, true) do
diff --git a/aconf/model/field.lua b/aconf/model/field.lua
index 8b300a5..26711f2 100644
--- a/aconf/model/field.lua
+++ b/aconf/model/field.lua
@@ -335,7 +335,9 @@ function M.TreeNode:save(context, value)
local path = context.path
if value == path then return end
- if type(value) == 'string' then value = context.txn:fetch(value) end
+ if type(value) == 'string' then
+ value = node.fetch(context.parent, value)
+ end
if object.isinstance(value, node.TreeNode) and node.path(value) == path then
return
end
diff --git a/aconf/model/init.lua b/aconf/model/init.lua
index e3395cc..cab92e7 100644
--- a/aconf/model/init.lua
+++ b/aconf/model/init.lua
@@ -97,8 +97,9 @@ end
function M.Reference:_choice(context)
local res = {}
- local txn = context.txn
- local obj = relabel('system', txn.fetch, txn, self:abs_scope(context))
+ local obj = relabel(
+ 'system', node.fetch, context.parent, self:abs_scope(context)
+ )
assert(isinstance(obj, node.Collection))
for k, v in node.pairs(obj) do
@@ -136,7 +137,9 @@ function M.Reference:meta(context)
end
function M.Reference:follow(context, value)
- return context.txn:fetch(M.path.rawjoin(self:abs_scope(context), value))
+ return node.fetch(
+ context.parent, M.path.rawjoin(self:abs_scope(context), value)
+ )
end
function M.Reference:load(context, options)
diff --git a/aconf/model/node.lua b/aconf/model/node.lua
index 4ef45d8..bc07ca4 100644
--- a/aconf/model/node.lua
+++ b/aconf/model/node.lua
@@ -148,7 +148,7 @@ function M.TreeNode:init(context, params)
function mt.has_permission(user, permission)
local p = permission..mt.path
- if mt.txn:fetch('/auth/permissions')[p] then
+ if mt.fetch('/auth/permissions')[p] then
return user:check_permission(p)
end
@@ -340,6 +340,7 @@ end
for _, mf in ipairs{
'addr',
'contains',
+ 'fetch',
'has_permission',
'insert',
'meta',