diff options
Diffstat (limited to 'acf/model/model.lua')
-rw-r--r-- | acf/model/model.lua | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/acf/model/model.lua b/acf/model/model.lua index 11e7fed..e4cffa4 100644 --- a/acf/model/model.lua +++ b/acf/model/model.lua @@ -120,8 +120,26 @@ function Model:init(context) return BoundMember(self, m) end + local function _members(tpe) + local res = {} + for _, name in ipairs(self.members) do + local m = member(name, false, tpe) + if m then table.insert(res, m) end + end + return res + end + + function mt.topology() + local res = {} + for _, f in ipairs(_members(Field)) do util.extend(res, f:topology()) end + return res + end + function mt.valid_member(name) return member(name) end + if not mt.txn then return end + + function mt.mmeta(name) return member(name, true):meta() end function mt.load(k, create) @@ -157,12 +175,7 @@ function Model:init(context) function mt.save(k, v) return member(k, true, Field):save(v) end local function tmeta(tpe) - local res = {} - for _, name in ipairs(self.members) do - local m = member(name, false, tpe) - if m then table.insert(res, m:meta()) end - end - return res + return util.map(function(m) return m:meta() end, _members(tpe)) end mt.meta.type = 'model' @@ -174,8 +187,7 @@ function Model:init(context) end function mt.validate() - for _, name in ipairs(mt.members()) do - local f = member(name, false, Field) + for _, f in ipairs(_members(Field)) do if not f.compute then f:validate_saved() end end end |