diff options
Diffstat (limited to 'acf')
-rw-r--r-- | acf/model/model.lua | 20 | ||||
-rw-r--r-- | acf/model/node.lua | 28 |
2 files changed, 22 insertions, 26 deletions
diff --git a/acf/model/model.lua b/acf/model/model.lua index 575df99..8892221 100644 --- a/acf/model/model.lua +++ b/acf/model/model.lua @@ -106,24 +106,24 @@ function Model:init(context) local mt = getmetatable(self) - local function member(name, strict, tpe) + function mt.member(name, loose, tpe) local m = mt.class[name] if not tpe then tpe = Member end if not isinstance(m, tpe) then m = nil end if m == nil then - if strict then raise(mt.path, 'Does not exist: '..name) end - return + if loose then return end + raise(mt.path, 'Does not exist: '..name) end - return BoundMember(self, m) + return BoundMember(self, name, m) end local function _members(tpe) local res = {} for _, name in ipairs(self.members) do - local m = member(name, false, tpe) + local m = mt.member(name, true, tpe) if m then table.insert(res, m) end end return res @@ -135,13 +135,11 @@ function Model:init(context) return res end - function mt.valid_member(name) return member(name) end - function mt.load(k, create) local v = mt.class[k] if isinstance(v, Field) then - v = BoundMember(self, v) + v = BoundMember(self, k, v) if v.compute then return v:compute() end return v:load(create) end @@ -149,7 +147,7 @@ function Model:init(context) assert(mt.txn) if isinstance(v, Action) then - local f = v.field and BoundMember(self, v.field) + local f = v.field and BoundMember(self, k, v.field) if create then return f and f:load(true) end return function(var) @@ -172,9 +170,9 @@ function Model:init(context) if not mt.txn then return end - function mt.mmeta(name) return member(name, true):meta() end + function mt.mmeta(name) return mt.member(name):meta() end - function mt.save(k, v) return member(k, true, Field):save(v) end + function mt.save(k, v) return mt.member(k, false, Field):save(v) end local function tmeta(tpe) return util.map(function(m) return m:meta() end, _members(tpe)) 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 |