summaryrefslogtreecommitdiffstats
path: root/aconf/model
diff options
context:
space:
mode:
Diffstat (limited to 'aconf/model')
-rw-r--r--aconf/model/init.lua1
-rw-r--r--aconf/model/net.lua6
-rw-r--r--aconf/model/node.lua11
-rw-r--r--aconf/model/root.lua8
-rw-r--r--aconf/model/service.lua12
5 files changed, 24 insertions, 14 deletions
diff --git a/aconf/model/init.lua b/aconf/model/init.lua
index 01b4791..0ee876a 100644
--- a/aconf/model/init.lua
+++ b/aconf/model/init.lua
@@ -58,6 +58,7 @@ local isinstance = object.isinstance
local super = object.super
M.path = require('aconf.path')
+M.addr = require('aconf.path.address')
local store = require('aconf.persistence')
local def_store = require('aconf.persistence.defer')
diff --git a/aconf/model/net.lua b/aconf/model/net.lua
index 39ca756..48a419a 100644
--- a/aconf/model/net.lua
+++ b/aconf/model/net.lua
@@ -1,5 +1,5 @@
--[[
-Copyright (c) 2012-2014 Kaarle Ritvanen
+Copyright (c) 2012-2015 Kaarle Ritvanen
See LICENSE file for license details
--]]
@@ -15,7 +15,7 @@ local object = require('aconf.object')
local class = object.class
local super = object.super
-local pth = require('aconf.path')
+local address = require('aconf.path.address')
local update = require('aconf.util').update
@@ -26,7 +26,7 @@ local BaseIPAddress = class(String)
function BaseIPAddress:abs_mask_addr(context)
if self.mask_addr then
- return pth.join(pth.parent(context.addr), self.mask_addr)
+ return address.join(address.parent(context.addr), self.mask_addr)
end
end
diff --git a/aconf/model/node.lua b/aconf/model/node.lua
index 91f0256..21b3ec2 100644
--- a/aconf/model/node.lua
+++ b/aconf/model/node.lua
@@ -13,6 +13,7 @@ local isinstance = object.isinstance
local super = object.super
local pth = require('aconf.path')
+local address = require('aconf.path.address')
local util = require('aconf.util')
local copy = util.copy
@@ -20,7 +21,11 @@ local setdefaults = util.setdefaults
local update = util.update
-function M.null_addr(path, name) return '/null'..pth.join(path, name) end
+function M.null_addr(path, name)
+ local comps = pth.split(path)
+ table.insert(comps, pth.escape(name))
+ return address.join('/null', table.unpack(comps))
+end
M.BoundMember = class()
@@ -33,7 +38,7 @@ function M.BoundMember:init(parent, name, field)
local member = field[k]
if type(member) ~= 'function' then return member end
- local addr = field.addr or pth.escape(name)
+ local addr = field.addr or address.escape(name)
if type(addr) == 'function' then addr = addr(pmt.path, name) end
return function(self, ...)
return member(
@@ -43,7 +48,7 @@ function M.BoundMember:init(parent, name, field)
privileged=pmt.privileged,
parent=parent,
path=pth.join(pmt.path, name),
- addr=pth.to_absolute(addr, pmt.addr)
+ addr=address.to_absolute(addr, pmt.addr)
},
...
)
diff --git a/aconf/model/root.lua b/aconf/model/root.lua
index 9b05488..e8525db 100644
--- a/aconf/model/root.lua
+++ b/aconf/model/root.lua
@@ -9,6 +9,7 @@ local model = require('aconf.model.model')
local node = require('aconf.model.node')
local object = require('aconf.object')
local pth = require('aconf.path')
+local address = require('aconf.path.address')
local util = require('aconf.util')
local setdefault = util.setdefault
@@ -39,18 +40,19 @@ local order = 0
function M.topology(addr, create)
local top = _topology
if type(addr) == 'table' then addr = util.copy(addr)
- else addr = pth.split(addr) end
+ else addr = address.split(addr) end
local function defaults(top)
return util.setdefaults(top, {members={}, paths={}, referrers={}})
end
while #addr > 0 do
+ local comp = address.escape(addr[1])
if create then
- top = setdefault(defaults(top).members, addr[1], {order=order})
+ top = setdefault(defaults(top).members, comp, {order=order})
order = order + 1
else
- top = top.members[addr[1]] or top.members[pth.wildcard]
+ top = top.members[comp] or top.members['*']
if not top then return end
end
table.remove(addr, 1)
diff --git a/aconf/model/service.lua b/aconf/model/service.lua
index 6951ffc..a7c02b0 100644
--- a/aconf/model/service.lua
+++ b/aconf/model/service.lua
@@ -1,21 +1,23 @@
--[[
-Copyright (c) 2012-2014 Kaarle Ritvanen
+Copyright (c) 2012-2015 Kaarle Ritvanen
See LICENSE file for license details
--]]
local fld = require('aconf.model.field')
local new = require('aconf.model.model').new
local super = require('aconf.object').super
-local pth = require('aconf.path')
+local address = require('aconf.path.address')
local store = require('aconf.persistence')
return function(name)
local res = new()
- local addr = pth.join('/service', name)
- local eaddr = pth.join(addr, 'enabled')
+ local addr = address.join('/service', name)
+ local eaddr = address.join(addr, 'enabled')
res.enabled = fld.Boolean{addr=eaddr, required=true}
- res.status = fld.String{addr=pth.join(addr, 'status'), editable=false}
+ res.status = fld.String{
+ addr=address.join(addr, 'status'), editable=false
+ }
local function is_enabled() return store:get(eaddr) end
local enabled