Modul:Cache

Aus Terraria Wiki
Wechseln zu: Navigation, Suche

Für dieses Modul gibt es noch keine Dokumentations-Unterseite. Erstelle jetzt eine.


local trim = mw.text.trim
local ugsub = mw.ustring.gsub
local cache = require 'mw.ext.LuaCache'

local args_table -- cache
-- helper function
local getArg = function(key)
	--Note: unnamed parameters will not be auto trimmed and named parameters will.
	local value = trim(args_table[key] or '') 
	return (value ~= '') and value or nil
end

-- A simple wrap for LuaCache

return {
	-- get
	-- return cached value or nothing
	get = function(frame)
		args_table = frame.args
		local result = cache.get(getArg(1) or getArg('key'))
		if result then 
			return tostring(result)
		end
	end,

	-- get & replace
	-- return cached value with all tokens replaced, or nothing
	getreplace = function(frame)
		args_table = frame.args
		local result = cache.get(getArg(1) or getArg('key'))
		if not result then
			return 
		end
		result = tostring(result)
		for token, replace in pairs(args_table) do
			if mw.ustring.sub(token, 1, 1) == '$' then
				-- escape, to perform plain text replacement. see Module:String
				token = ugsub(token, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1")
				replace = ugsub(replace, "%%", "%%%%" )
				result = ugsub(result, token, replace)
				-- Note: gsub returns 2 values, so result = gsub(str, gsub(token), gsub(replace)) won't work.
			end
		end
		return result
	end,
	
	-- set
	-- return 'true' or '' if $return or $4 = true
	set = function(frame)
		args_table = frame.args
		local result = cache.set(getArg(1) or getArg('key'), getArg(2) or getArg('value'), tonumber(getArg(3) or getArg('exptime')))
		if getArg('return') or getArg(4) then
			return result or ''
		end
	end,

	-- set, then get and replace
	-- store value to cache then return the value with all tokens replaced.
	setreplace = function(frame)
		args_table = frame.args
		local str = getArg(2) or getArg('value')
		cache.set(getArg(1) or getArg('key'), str, tonumber(getArg(3) or getArg('exptime')))

		for token, replace in pairs(args_table) do
			if mw.ustring.sub(token, 1, 1) == '$' then
				-- escape, to perform plain text replacement. see Module:String
				token = ugsub(token, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1")
				replace = ugsub(replace, "%%", "%%%%" )
				str = ugsub(str, token, replace)
			end
		end
		return str
	end,

	-- delete
	-- return 'true' or '' if $return or $2 = true
	delete = function(frame)
		args_table = frame.args
		local result = cache.delete(getArg(1) or getArg('key'))
		if getArg('return') or getArg(2) then
			return result or ''
		end
	end,

}