summaryrefslogtreecommitdiffstats
path: root/acf/model/node.lua
diff options
context:
space:
mode:
Diffstat (limited to 'acf/model/node.lua')
-rw-r--r--acf/model/node.lua73
1 files changed, 33 insertions, 40 deletions
diff --git a/acf/model/node.lua b/acf/model/node.lua
index 688336c..b708112 100644
--- a/acf/model/node.lua
+++ b/acf/model/node.lua
@@ -3,7 +3,7 @@ Copyright (c) 2012-2013 Kaarle Ritvanen
See LICENSE file for license details
--]]
-module(..., package.seeall)
+local M = {}
local raise = require('acf.error').raise
@@ -16,9 +16,9 @@ local pth = require('acf.path')
local util = require('acf.util')
-BoundMember = class()
+M.BoundMember = class()
-function BoundMember:init(parent, name, field)
+function M.BoundMember:init(parent, name, field)
local pmt = getmetatable(parent)
local mt = {}
@@ -45,9 +45,9 @@ function BoundMember:init(parent, name, field)
end
-TreeNode = class()
+M.TreeNode = class()
-function TreeNode:init(context)
+function M.TreeNode:init(context)
local mt = getmetatable(self)
util.update(mt, context)
@@ -75,13 +75,13 @@ function TreeNode:init(context)
if ({create=true, delete=true})[permission] then
permission = 'modify'
end
- return has_permission(mt.parent, user, permission)
+ return M.has_permission(mt.parent, user, permission)
end
mt.txn.validable[mt.path] = mt.addr
end
-function TreeNode:fetch(path, create)
+function M.TreeNode:fetch(path, create)
if type(path) == 'string' then path = pth.split(path) end
if #path == 0 then return self end
@@ -102,10 +102,10 @@ function TreeNode:fetch(path, create)
raise(pth.join(mt.path, name), 'Is a primitive value')
end
- return TreeNode.fetch(next, path, create)
+ return M.TreeNode.fetch(next, path, create)
end
-function TreeNode:search_refs(path)
+function M.TreeNode:search_refs(path)
if type(path) == 'string' then path = pth.split(path) end
if #path == 0 then return {} end
@@ -121,7 +121,7 @@ function TreeNode:search_refs(path)
local member = mt.member(name)
if member.deleted then return {member} end
- return isinstance(next, TreeNode) and TreeNode.search_refs(
+ return isinstance(next, M.TreeNode) and M.TreeNode.search_refs(
next, path
) or {}
end
@@ -138,22 +138,22 @@ function TreeNode:search_refs(path)
end
-Collection = class(TreeNode)
+M.Collection = class(M.TreeNode)
-function Collection:init(context, params)
- super(self, Collection):init(context)
+function M.Collection:init(context, params)
+ super(self, M.Collection):init(context)
self.init = nil
self.fetch = nil
self.search_refs = nil
local mt = getmetatable(self)
- local field = BoundMember(self, pth.wildcard, params.field)
+ local field = M.BoundMember(self, pth.wildcard, params.field)
function mt.topology() return field:topology() end
function mt.member(name)
- return BoundMember(self, name, params.field)
+ return M.BoundMember(self, name, params.field)
end
function mt.load(k, create) return mt.member(k):load(create) end
@@ -189,10 +189,10 @@ function Collection:init(context, params)
end
-List = class(Collection)
+M.List = class(M.Collection)
-function List:init(context, params)
- super(self, List):init(context, params)
+function M.List:init(context, params)
+ super(self, M.List):init(context, params)
local mt = getmetatable(self)
mt.meta.type = 'list'
@@ -220,10 +220,10 @@ end
-- experimental
-Mixed = class(Collection)
+M.Mixed = class(M.Collection)
-function Mixed:init(context, params)
- super(self, Mixed):init(context, params)
+function M.Mixed:init(context, params)
+ super(self, M.Mixed):init(context, params)
-- TODO dynamic meta: list non-leaf children
local mt = getmetatable(self)
@@ -242,27 +242,17 @@ local function meta_func(attr)
end
end
-addr = meta_func('addr')
-has_permission = meta_func('has_permission')
-insert = meta_func('insert')
-members = meta_func('members')
-meta = meta_func('meta')
-mmeta = meta_func('mmeta')
-parent = meta_func('parent')
-path = meta_func('path')
-topology = meta_func('topology')
-validate = meta_func('validate')
+for _, mf in ipairs{
+ 'addr', 'has_permission', 'insert', 'meta', 'mmeta', 'path', 'topology'
+} do M[mf] = meta_func(mf) end
-local rawpairs = pairs
-local rawipairs = ipairs
-
-function pairs(tbl)
- if not isinstance(tbl, TreeNode) then return rawpairs(tbl) end
+function M.pairs(tbl)
+ if not isinstance(tbl, M.TreeNode) then return pairs(tbl) end
local mt = getmetatable(tbl)
local res = {}
- for _, member in rawipairs(mt.members()) do res[member] = mt.load(member) end
- return rawpairs(res)
+ for _, member in ipairs(mt.members()) do res[member] = mt.load(member) end
+ return pairs(res)
end
local function _ipairs(mt, i)
@@ -271,7 +261,10 @@ local function _ipairs(mt, i)
if v == nil then return end
return i, v
end
-function ipairs(tbl)
- if not isinstance(tbl, TreeNode) then return rawipairs(tbl) end
+function M.ipairs(tbl)
+ if not isinstance(tbl, M.TreeNode) then return ipairs(tbl) end
return _ipairs, getmetatable(tbl), 0
end
+
+
+return M