diff options
Diffstat (limited to 'acf/model/node.lua')
-rw-r--r-- | acf/model/node.lua | 28 |
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 |