IMPORTANT: due to a drive failure, as of 13-Mar-2021, the Mercurial repository had to be re-mirrored, which changed every commit SHA. The old SHAs and trees are backed up in the vault branches. Please migrate to the new branches as soon as you can.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
prosody/core/objectmanager.lua

68 lines
1.5 KiB

-- Prosody IM
-- Copyright (C) 2008-2009 Matthew Wild
-- Copyright (C) 2008-2009 Waqas Hussain
--
-- This project is MIT/X11 licensed. Please see the
-- COPYING file in the source package for more information.
--
local new_multitable = require "util.multitable".new;
local t_insert = table.insert;
local t_concat = table.concat;
local tostring = tostring;
local unpack = unpack;
local pairs = pairs;
local error = error;
local type = type;
local _G = _G;
local data = new_multitable();
module "objectmanager"
function set(...)
return data:set(...);
end
function remove(...)
return data:remove(...);
end
function get(...)
return data:get(...);
end
local function get_path(path)
if type(path) == "table" then return path; end
local s = {};
for part in tostring(path):gmatch("[%w_]+") do
t_insert(s, part);
end
return s;
end
function get_object(path)
path = get_path(path)
return data:get(unpack(path)), path;
end
function set_object(path, object)
path = get_path(path);
data:set(unpack(path), object);
end
data:set("ls", function(_dir)
local obj, dir = get_object(_dir);
if not obj then error("object not found: " .. t_concat(dir, '/')); end
local r = {};
if type(obj) == "table" then
for key, val in pairs(obj) do
r[key] = type(val);
end
end
return r;
end);
data:set("get", get_object);
data:set("set", set_object);
data:set("echo", function(...) return {...}; end);
data:set("_G", _G);
return _M;