diff options
Diffstat (limited to 'server.lua')
-rw-r--r-- | server.lua | 27 |
1 files changed, 16 insertions, 11 deletions
@@ -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 |