Software /
code /
prosody
Diff
core/moduleapi.lua @ 9149:d03f21729b2c
moduleapi: Remove multiple-parameters feature from module:shared()
Multiple paths are rarely used, and leads to less clear code than just
calling module:shared() once per shared table. It also prevents us from
extending the API with new parameters in the future.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Wed, 08 Aug 2018 08:19:01 +0100 |
parent | 9042:734ba7080b35 |
child | 9509:b57353f76c83 |
line wrap: on
line diff
--- a/core/moduleapi.lua Wed Aug 08 08:12:36 2018 +0100 +++ b/core/moduleapi.lua Wed Aug 08 08:19:01 2018 +0100 @@ -164,33 +164,32 @@ 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 +local function get_shared_table_from_path(module, tables, path) + if path:sub(1,1) ~= "/" then -- Prepend default components + local default_path_components = { module.host, module.name }; + 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 = tables[path]; + if not shared then + shared = {}; + if path:match("%-cache$") then + setmetatable(shared, { __mode = "kv" }); + end + tables[path] = shared; + end + return shared; +end + +-- Returns a shared table at the specified virtual path +-- Intentionally does not allow the table to be _set_, it -- is auto-created if it does not exist. -function api:shared(...) +function api:shared(path) if not self.shared_data then self.shared_data = {}; end - 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 = {}; - if path:match("%-cache$") then - setmetatable(shared, { __mode = "kv" }); - end - shared_data[path] = shared; - end - t_insert(data_array, shared); - self.shared_data[path] = shared; - end - return unpack(data_array); + local shared = get_shared_table_from_path(self, shared_data, path); + self.shared_data[path] = shared; + return shared; end function api:get_option(name, default_value)