summaryrefslogtreecommitdiffstats
path: root/acf/model/model.lua
diff options
context:
space:
mode:
Diffstat (limited to 'acf/model/model.lua')
-rw-r--r--acf/model/model.lua28
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