Merge 0.9->0.10
[prosody.git] / core / moduleapi.lua
index 6e85753153c6e48c1508ef175e9a9f35937188d9..e32c116aa7fe57d694df7a79b86d9c0251bfb887 100644 (file)
@@ -7,17 +7,20 @@
 --
 
 local config = require "core.configmanager";
-local modulemanager = require "modulemanager"; -- This is necessary to avoid require loops
+local modulemanager; -- This gets set from modulemanager
 local array = require "util.array";
 local set = require "util.set";
 local logger = require "util.logger";
 local pluginloader = require "util.pluginloader";
 local timer = require "util.timer";
+local resolve_relative_path = require"util.paths".resolve_relative_path;
+local measure = require "core.statsmanager".measure;
 
 local t_insert, t_remove, t_concat = table.insert, table.remove, table.concat;
 local error, setmetatable, type = error, setmetatable, type;
 local ipairs, pairs, select, unpack = ipairs, pairs, select, unpack;
 local tonumber, tostring = tonumber, tostring;
+local require = require;
 
 local prosody = prosody;
 local hosts = prosody.hosts;
@@ -113,6 +116,10 @@ function api:hook_tag(xmlns, name, handler, priority)
 end
 api.hook_stanza = api.hook_tag; -- COMPAT w/pre-0.9
 
+function api:unhook(event, handler)
+       return self:unhook_object_event((hosts[self.host] or prosody).events, event, handler);
+end
+
 function api:require(lib)
        local f, n = pluginloader.load_code(self.name, lib..".lib.lua", self.environment);
        if not f then
@@ -356,12 +363,21 @@ function api:get_directory()
 end
 
 function api:load_resource(path, mode)
-       path = config.resolve_relative_path(self:get_directory(), path);
+       path = resolve_relative_path(self:get_directory(), path);
        return io.open(path, mode);
 end
 
 function api:open_store(name, type)
-       return storagemanager.open(self.host, name or self.name, type);
+       return require"core.storagemanager".open(self.host, name or self.name, type);
+end
+
+function api:measure(name, type)
+       return measure(type, "/"..self.host.."/mod_"..self.name.."/"..name);
+end
+
+function api.init(mm)
+       modulemanager = mm;
+       return api;
 end
 
 return api;