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)