summaryrefslogtreecommitdiffstats
path: root/acf
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-05-08 17:37:40 +0300
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-05-08 23:07:00 +0300
commit16331a3ae0dcd283e2f4b7f6230742e47d1b7cb3 (patch)
tree0b6c3e71f687b2c9d90462a9992b7355813ab546 /acf
parent29859154a1b0cd9600a05549e447843103b7eb9d (diff)
downloadaconf-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.lua4
-rw-r--r--acf/model/field.lua15
-rw-r--r--acf/model/init.lua17
-rw-r--r--acf/model/model.lua12
-rw-r--r--acf/model/root.lua4
-rw-r--r--acf/modules/awall.lua8
-rw-r--r--acf/modules/generic.lua9
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')