diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-05-08 17:37:40 +0300 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-05-08 23:07:00 +0300 |
commit | 16331a3ae0dcd283e2f4b7f6230742e47d1b7cb3 (patch) | |
tree | 0b6c3e71f687b2c9d90462a9992b7355813ab546 /acf | |
parent | 29859154a1b0cd9600a05549e447843103b7eb9d (diff) | |
download | aconf-16331a3ae0dcd283e2f4b7f6230742e47d1b7cb3.tar.bz2 aconf-16331a3ae0dcd283e2f4b7f6230742e47d1b7cb3.tar.xz |
explicit control for automatic creation of TreeNode instances
Diffstat (limited to 'acf')
-rw-r--r-- | acf/model/aaa.lua | 4 | ||||
-rw-r--r-- | acf/model/field.lua | 15 | ||||
-rw-r--r-- | acf/model/init.lua | 17 | ||||
-rw-r--r-- | acf/model/model.lua | 12 | ||||
-rw-r--r-- | acf/model/root.lua | 4 | ||||
-rw-r--r-- | acf/modules/awall.lua | 8 | ||||
-rw-r--r-- | acf/modules/generic.lua | 9 |
7 files changed, 41 insertions, 28 deletions
diff --git a/acf/model/aaa.lua b/acf/model/aaa.lua index f503ea8..9905690 100644 --- a/acf/model/aaa.lua +++ b/acf/model/aaa.lua @@ -46,8 +46,8 @@ Authentication.permissions = M.Set{ M.register( 'auth', - '/json'..require('posix').getcwd()..'/config/aaa.json', - Authentication + Authentication, + '/json'..require('posix').getcwd()..'/config/aaa.json' ) M.permission.defaults('/auth') diff --git a/acf/model/field.lua b/acf/model/field.lua index 459bb92..ad26818 100644 --- a/acf/model/field.lua +++ b/acf/model/field.lua @@ -108,6 +108,13 @@ end TreeNode = class(Field) +function TreeNode:load(context, create) + if not ( + create or self.create or context.txn:get(context.addr, 'table') + ) then return end + return self.itype(context, self.iparams) +end + function TreeNode:save(context, value) local path = context.path @@ -147,12 +154,10 @@ Model = class(TreeNode) function Model:init(params) super(self, Model):init(params) + assert(self.model) + self.itype = self.model + self.dtype = 'model' self.widget = self.dtype end - -function Model:load(context, create) - if not (create or context.txn:get(context.addr, 'table')) then return end - return self.model(context) -end diff --git a/acf/model/init.lua b/acf/model/init.lua index ed06548..895ed62 100644 --- a/acf/model/init.lua +++ b/acf/model/init.lua @@ -189,20 +189,21 @@ Model = fld.Model Collection = class(fld.TreeNode) -function Collection:init(params, ctype) +function Collection:init(params, itype) + if params.create == nil then params.create = true end super(self, Collection):init(params) + assert(self.type) - self.ctype = ctype or node.Collection + self.itype = itype or node.Collection + self.iparams = {required=self.required} + self.dtype = 'collection' self.widget = self.dtype end -function Collection:load(context) - -- automatically create missing collection (TODO: make this configurable?) - return self.ctype( - context, - {field=to_field(self.type), required=self.required} - ) +function Collection:load(context, create) + if not self.iparams.field then self.iparams.field = to_field(self.type) end + return super(self, Collection):load(context, create) end diff --git a/acf/model/model.lua b/acf/model/model.lua index 9808157..89de029 100644 --- a/acf/model/model.lua +++ b/acf/model/model.lua @@ -23,17 +23,19 @@ local pth = require('acf.path') local util = require('acf.util') -local function to_member(obj, addr) +local function to_member(obj, params) + if not params then params = {} end if object.issubclass(obj, Model) then - return fld.Model{model=obj, addr=addr} + params.model = obj + return fld.Model(params) end - local res = getmetatable(obj).class and obj or obj{addr=addr} + local res = getmetatable(obj).class and obj or obj(params) assert(isinstance(res, Member)) return res end -function to_field(obj, addr) - local res = to_member(obj, addr) +function to_field(obj, params) + local res = to_member(obj, params) assert(isinstance(res, Field)) return res end diff --git a/acf/model/root.lua b/acf/model/root.lua index b2bebb1..d155c7c 100644 --- a/acf/model/root.lua +++ b/acf/model/root.lua @@ -27,6 +27,6 @@ function RootModel:meta(path) return node.mmeta(self:search(pth.parent(path), true), pth.name(path)) end -function register(name, addr, field) - RootModel[name] = model.to_field(field, addr) +function register(name, field, addr) + RootModel[name] = model.to_field(field, {addr=addr, create=true}) end diff --git a/acf/modules/awall.lua b/acf/modules/awall.lua index 2fb912f..0b05fb4 100644 --- a/acf/modules/awall.lua +++ b/acf/modules/awall.lua @@ -122,8 +122,10 @@ AWall['clamp-mss'] = M.Collection{type=ClampMSSRule} AWall['no-track'] = M.Collection{type=Rule} AWall.ipset = M.Collection{type=IPSet} -M.register('awall', - '/json'..require('posix').getcwd()..'/config/awall.json', - AWall) +M.register( + 'awall', + AWall, + '/json'..require('posix').getcwd()..'/config/awall.json' +) M.permission.defaults('/awall') diff --git a/acf/modules/generic.lua b/acf/modules/generic.lua index 76c42fc..9ec95bf 100644 --- a/acf/modules/generic.lua +++ b/acf/modules/generic.lua @@ -1,5 +1,5 @@ --[[ -Copyright (c) 2012 Kaarle Ritvanen +Copyright (c) 2012-2013 Kaarle Ritvanen See LICENSE file for license details --]] @@ -9,5 +9,8 @@ module(..., package.seeall) local M = require('acf.model') -M.register('proc', '/files/proc', M.Mixed) -M.register('augeas', '/augeas/files', M.Mixed) +M.register('proc', M.Mixed, '/files/proc') +M.permission.defaults('/proc') + +M.register('augeas', M.Mixed, '/augeas/files') +M.permission.defaults('/augeas') |