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/init.lua | 3 +-- aconf/model/model.lua | 21 +++++++-------------- aconf/model/node.lua | 4 ++-- 3 files changed, 10 insertions(+), 18 deletions(-) (limited to 'aconf/model') diff --git a/aconf/model/init.lua b/aconf/model/init.lua index acdf7f3..663c7f8 100644 --- a/aconf/model/init.lua +++ b/aconf/model/init.lua @@ -254,8 +254,7 @@ function M.Set.save_member(tn, k, v) node.insert(tn, v) end M.Mixed = class(M.Collection) function M.Mixed:init(params) - params.type = M.Mixed - super(self, M.Mixed):init(params, node.Mixed) + super(self, M.Mixed):init(update(params, {type=M.Mixed}), node.Mixed) self.pfield = Field() end 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), diff --git a/aconf/model/node.lua b/aconf/model/node.lua index 80f1de0..0b4d36d 100644 --- a/aconf/model/node.lua +++ b/aconf/model/node.lua @@ -1,5 +1,5 @@ --[[ -Copyright (c) 2012-2014 Kaarle Ritvanen +Copyright (c) 2012-2015 Kaarle Ritvanen See LICENSE file for license details --]] @@ -337,7 +337,7 @@ function M.Collection:init(context, params) end if params.key then - local kf = M.BoundMember(self, k, params.key) + local kf = M.BoundMember(self, k, object.toinstance(params.key)) if kf:normalize(k) ~= k then raise(mt.path, 'Invalid member name: '..k) end -- cgit v1.2.3