summaryrefslogtreecommitdiffstats
path: root/aconf/model/model.lua
diff options
context:
space:
mode:
Diffstat (limited to 'aconf/model/model.lua')
-rw-r--r--aconf/model/model.lua21
1 files changed, 7 insertions, 14 deletions
diff --git a/aconf/model/model.lua b/aconf/model/model.lua
index 153281f..8ad2cda 100644
--- a/aconf/model/model.lua
+++ b/aconf/model/model.lua
@@ -26,22 +26,15 @@ local pth = require('aconf.path')
local util = require('aconf.util')
local copy = util.copy
local map = util.map
+local update = util.update
-local function to_member(obj, params)
- if not params then params = {} end
+function M.to_field(obj, params, cls)
if object.issubclass(obj, M.Model) then
- params.model = obj
- return Model(params)
+ return Model(update(params, {model=obj}))
end
- local res = getmetatable(obj).class and obj or obj(params)
- assert(isinstance(res, Member))
- return res
-end
-
-function M.to_field(obj, params)
- local res = to_member(obj, params)
- assert(isinstance(res, Field))
+ local res = object.toinstance(obj, params)
+ assert(isinstance(res, cls or Field))
return res
end
@@ -88,7 +81,7 @@ function M.new(base)
k = normalize_name(k)
local override = t[k]
- if type(v) == 'table' then v = to_member(v) end
+ if type(v) == 'table' then v = M.to_field(v, nil, Member) end
rawset(t, k, v)
@@ -209,7 +202,7 @@ function M.Model:init(context)
end
function mt.init_meta(meta)
- util.update(
+ update(
meta,
{
fields=tmeta(Field),