diff options
Diffstat (limited to 'acf/model/model.lua')
-rw-r--r-- | acf/model/model.lua | 20 |
1 files changed, 9 insertions, 11 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)) |