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.lua28
1 files changed, 13 insertions, 15 deletions
diff --git a/acf/model/node.lua b/acf/model/node.lua
index d038e6e..4c05d4d 100644
--- a/acf/model/node.lua
+++ b/acf/model/node.lua
@@ -16,7 +16,7 @@ local util = require('acf.util')
BoundMember = class()
-function BoundMember:init(parent, field)
+function BoundMember:init(parent, name, field)
local pmt = getmetatable(parent)
local mt = {}
@@ -24,12 +24,6 @@ function BoundMember:init(parent, field)
local member = field[k]
if type(member) ~= 'function' then return member end
return function(self, ...)
- local name
- if field.name then name = field.name
- else
- name = arg[1]
- table.remove(arg, 1)
- end
return member(
field,
{
@@ -92,7 +86,7 @@ function TreeNode:fetch(path, create)
local mt = getmetatable(self)
local name = path[1]
- if not mt.valid_member(name) then
+ if not mt.member(name) then
raise(mt.path, 'Member does not exist: '..name)
end
@@ -118,17 +112,21 @@ function Collection:init(context, params)
self.init = nil
self.fetch = nil
- local field = BoundMember(self, params.field)
-
local mt = getmetatable(self)
- function mt.topology() return field:topology(pth.wildcard) end
- function mt.valid_member(name) return true end
- function mt.load(k, create) return field:load(k, create) end
+ local field = BoundMember(self, pth.wildcard, params.field)
+
+ function mt.topology() return field:topology() end
+
+ function mt.member(name)
+ return BoundMember(self, name, params.field)
+ end
+
+ function mt.load(k, create) return mt.member(k):load(create) end
if not mt.txn then return end
mt.meta.type = 'collection'
- mt.meta.members = field:meta(pth.wildcard)
+ mt.meta.members = field:meta()
mt.meta['ui-member'] = params.ui_member or string.gsub(
mt.meta['ui-name'], 's$', ''
)
@@ -150,7 +148,7 @@ function Collection:init(context, params)
end
end
- function mt.save(k, v) field:save(k, v) end
+ function mt.save(k, v) mt.member(k):save(v) end
end