Software /
code /
prosody
Comparison
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 |
comparison
equal
deleted
inserted
replaced
9148:a474c94d0b0a | 9149:d03f21729b2c |
---|---|
162 end | 162 end |
163 self.dependencies[name] = true; | 163 self.dependencies[name] = true; |
164 return mod; | 164 return mod; |
165 end | 165 end |
166 | 166 |
167 -- Returns one or more shared tables at the specified virtual paths | 167 local function get_shared_table_from_path(module, tables, path) |
168 -- Intentionally does not allow the table at a path to be _set_, it | 168 if path:sub(1,1) ~= "/" then -- Prepend default components |
169 local default_path_components = { module.host, module.name }; | |
170 local n_components = select(2, path:gsub("/", "%1")); | |
171 path = (n_components<#default_path_components and "/" or "") | |
172 ..t_concat(default_path_components, "/", 1, #default_path_components-n_components).."/"..path; | |
173 end | |
174 local shared = tables[path]; | |
175 if not shared then | |
176 shared = {}; | |
177 if path:match("%-cache$") then | |
178 setmetatable(shared, { __mode = "kv" }); | |
179 end | |
180 tables[path] = shared; | |
181 end | |
182 return shared; | |
183 end | |
184 | |
185 -- Returns a shared table at the specified virtual path | |
186 -- Intentionally does not allow the table to be _set_, it | |
169 -- is auto-created if it does not exist. | 187 -- is auto-created if it does not exist. |
170 function api:shared(...) | 188 function api:shared(path) |
171 if not self.shared_data then self.shared_data = {}; end | 189 if not self.shared_data then self.shared_data = {}; end |
172 local paths = { n = select("#", ...), ... }; | 190 local shared = get_shared_table_from_path(self, shared_data, path); |
173 local data_array = {}; | 191 self.shared_data[path] = shared; |
174 local default_path_components = { self.host, self.name }; | 192 return shared; |
175 for i = 1, paths.n do | |
176 local path = paths[i]; | |
177 if path:sub(1,1) ~= "/" then -- Prepend default components | |
178 local n_components = select(2, path:gsub("/", "%1")); | |
179 path = (n_components<#default_path_components and "/" or "") | |
180 ..t_concat(default_path_components, "/", 1, #default_path_components-n_components).."/"..path; | |
181 end | |
182 local shared = shared_data[path]; | |
183 if not shared then | |
184 shared = {}; | |
185 if path:match("%-cache$") then | |
186 setmetatable(shared, { __mode = "kv" }); | |
187 end | |
188 shared_data[path] = shared; | |
189 end | |
190 t_insert(data_array, shared); | |
191 self.shared_data[path] = shared; | |
192 end | |
193 return unpack(data_array); | |
194 end | 193 end |
195 | 194 |
196 function api:get_option(name, default_value) | 195 function api:get_option(name, default_value) |
197 local config = require "core.configmanager"; | 196 local config = require "core.configmanager"; |
198 local value = config.get(self.host, name); | 197 local value = config.get(self.host, name); |