summaryrefslogtreecommitdiffstats
path: root/server.lua
diff options
context:
space:
mode:
Diffstat (limited to 'server.lua')
-rw-r--r--server.lua27
1 files changed, 16 insertions, 11 deletions
diff --git a/server.lua b/server.lua
index 0bd5553..43a6a09 100644
--- a/server.lua
+++ b/server.lua
@@ -120,21 +120,18 @@ return function(env)
if method == 'GET' then
local obj = txn:search(path)
- if obj == nil then return 404 end
-
local res
if isinstance(obj, acf.model.node.TreeNode) then
local node = {}
- for _, k in ipairs(acf.model.node.members(obj)) do
- local v = obj[k]
- if isinstance(v, acf.model.node.TreeNode) then
- v = acf.model.node.path(v)
- end
- node[k] = v
+ for k, v in acf.model.node.pairs(obj) do
+ node[k] = isinstance(
+ v,
+ acf.model.node.TreeNode
+ ) and acf.model.node.path(v) or v
end
res = {data=node, meta=acf.model.node.meta(obj)}
-
+
else
res = {
data=obj,
@@ -145,8 +142,16 @@ return function(env)
return 200, nil, res
end
- -- TODO implement POST for invoking object-specific actions
- if method == 'DELETE' then parent[name] = nil
+ if method == 'POST' then
+ local obj = txn:search(path)
+ if not acf.object.isinstance(obj, acf.model.set.Set) then
+ -- TODO invoke model-specific actions
+ return 405
+ end
+
+ acf.model.set.add(obj, data)
+
+ elseif method == 'DELETE' then parent[name] = nil
elseif method == 'PUT' then parent[name] = data
else return 405 end