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.lua20
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))