Software /
code /
prosody
Diff
core/moduleapi.lua @ 4539:3cbfa768eb06
moduleapi: Add module:shared(), a way to easily share data between multiple loaded modules
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sun, 22 Jan 2012 19:48:53 +0000 |
parent | 4538:d0a89c1c43fd |
child | 4605:69746db53125 |
line wrap: on
line diff
--- a/core/moduleapi.lua Sun Jan 22 19:35:50 2012 +0000 +++ b/core/moduleapi.lua Sun Jan 22 19:48:53 2012 +0000 @@ -129,6 +129,29 @@ return mod; end +-- Returns one or more shared tables at the specified virtual paths +-- Intentionally does not allow the table at a path to be _set_, it +-- is auto-created if it does not exist. +function api:shared(...) + local paths = { n = select("#", ...), ... }; + local data_array = {}; + local default_path_components = { self.host, self.name }; + for i = 1, paths.n do + local path = paths[i]; + if path:sub(1,1) ~= "/" then -- Prepend default components + local n_components = select(2, path:gsub("/", "%1")); + path = (n_components<#default_path_components and "/" or "")..t_concat(default_path_components, "/", 1, #default_path_components-n_components).."/"..path; + end + local shared = shared_data[path]; + if not shared then + shared = {}; + shared_data[path] = shared; + end + t_insert(data_array, shared); + end + return unpack(data_array); +end + function api:get_option(name, default_value) local value = config.get(self.host, self.name, name); if value == nil then