Software /
code /
prosody
Comparison
core/moduleapi.lua @ 4538:d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sun, 22 Jan 2012 19:35:50 +0000 |
parent | 4534:7a0a31c4f6c5 |
child | 4539:3cbfa768eb06 |
comparison
equal
deleted
inserted
replaced
4537:d8d257c13562 | 4538:d0a89c1c43fd |
---|---|
98 if not f then error("Failed to load plugin library '"..lib.."', error: "..n); end -- FIXME better error message | 98 if not f then error("Failed to load plugin library '"..lib.."', error: "..n); end -- FIXME better error message |
99 setfenv(f, self.environment); | 99 setfenv(f, self.environment); |
100 return f(); | 100 return f(); |
101 end | 101 end |
102 | 102 |
103 function api:depends(name) | |
104 if not self.dependencies then | |
105 self.dependencies = {}; | |
106 self:hook("module-reloaded", function (event) | |
107 if self.dependencies[event.module] then | |
108 self:log("info", "Auto-reloading due to reload of %s:%s", event.host, event.module); | |
109 modulemanager.reload(self.host, self.name); | |
110 return; | |
111 end | |
112 end); | |
113 self:hook("module-unloaded", function (event) | |
114 if self.dependencies[event.module] then | |
115 self:log("info", "Auto-unloading due to unload of %s:%s", event.host, event.module); | |
116 modulemanager.unload(self.host, self.name); | |
117 end | |
118 end); | |
119 end | |
120 local mod = modulemanager.get_module(self.host, name) or modulemanager.get_module("*", name); | |
121 if not mod then | |
122 local err; | |
123 mod, err = modulemanager.load(self.host, name); | |
124 if not mod then | |
125 return error(("Unable to load required module, mod_%s: %s"):format(name, ((err or "unknown error"):gsub("%-", " ")) )); | |
126 end | |
127 end | |
128 self.dependencies[name] = true; | |
129 return mod; | |
130 end | |
131 | |
103 function api:get_option(name, default_value) | 132 function api:get_option(name, default_value) |
104 local value = config.get(self.host, self.name, name); | 133 local value = config.get(self.host, self.name, name); |
105 if value == nil then | 134 if value == nil then |
106 value = config.get(self.host, "core", name); | 135 value = config.get(self.host, "core", name); |
107 if value == nil then | 136 if value == nil then |