From 27fec74655c9e6a3004d2b606724375f85b05697 Mon Sep 17 00:00:00 2001 From: Kaarle Ritvanen Date: Fri, 23 Jan 2015 23:55:37 +0200 Subject: model: auto-instantiate collection key field --- aconf/model/model.lua | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) (limited to 'aconf/model/model.lua') 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), -- cgit v1.2.3