DataFetch Test: Difference between revisions
From Project Rebearth
Created page with "local title = mw.title.new("Module:DataFetch/data.json") local data = title and title.exists and mw.text.jsonDecode(title:getContent()) assert(data, "Data failed to load. Please check \"Module:DataFetch/data.json\" exists.") local biomeKeys = { wood = "w", stone = "s", earth = "e", arctic = "a", } -- if the biome argument is the name of the biome rather than its letter, return the corresponding letter. local function getBiomeKey(biomeName) return b..." |
No edit summary |
||
| (6 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
local NOT_APPLICABLE = "N/A" | |||
local title = mw.title.new("Module:DataFetch/data.json") | local title = mw.title.new("Module:DataFetch/data.json") | ||
local data = title and title.exists and mw.text.jsonDecode(title:getContent()) | local data = title and title.exists and mw.text.jsonDecode(title:getContent()) | ||
| Line 8: | Line 10: | ||
stone = "s", | stone = "s", | ||
earth = "e", | earth = "e", | ||
arctic = "a" | arctic = "a" | ||
} | } | ||
-- if the biome argument is the name of the biome rather than its letter, return the corresponding letter | -- if the biome argument is the name of the biome rather than its letter, return the corresponding letter | ||
local function getBiomeKey(biomeName) | local function getBiomeKey(biomeName) | ||
return biomeKeys[string.lower(biomeName)] or biomeName | return biomeKeys[string.lower(biomeName)] or biomeName | ||
end | |||
-- returns first argument that is not an empty string | |||
local function getValidArg(...) | |||
for i = 1, select("#", ...) do | |||
local arg = select(i, ...) | |||
if arg and arg ~= "" then | |||
return arg | |||
end | |||
end | |||
end | |||
local function valueFindRecursive(t, ...) | |||
for i = 1, select("#", ...) do | |||
local k = select(i, ...) | |||
local v = t[k] | |||
if type(v) == "table" then | |||
return valueFindRecursive(v, ...) | |||
end | |||
if v ~= nil then | |||
return v | |||
end | |||
end | |||
return NOT_APPLICABLE | |||
end | end | ||
| Line 21: | Line 47: | ||
local args = f.args | local args = f.args | ||
local targetData = args.data | local targetData = getValidArg(args.data) | ||
local biome = args.biome | local biome = getBiomeKey(getValidArg(args.biome)) | ||
local resource = args.resource | local resource = getValidArg(args.resource, args.res) | ||
local name = args.name | local name = getValidArg(args.name) | ||
local buildingData = data[name] | local buildingData = data[name] | ||
if | if not buildingData then | ||
return NOT_APPLICABLE | |||
return | |||
end | end | ||
-- if targetData == "cost" then | |||
-- local costData = buildingData.cost | |||
-- if not costData then | |||
-- return NOT_APPLICABLE | |||
-- end | |||
-- local biomeValues = costData[getBiomeKey(biome)] | |||
-- return biomeValues[resource] or NOT_APPLICABLE | |||
-- elseif targetData == "rate" then | |||
-- local rateData = buildingData.rate | |||
-- if not rateData then | |||
-- return NOT_APPLICABLE | |||
-- end | |||
-- return rateData[resource] or NOT_APPLICABLE | |||
-- elseif targetData == "balance" then | |||
-- local rateData = buildingData.balance | |||
-- if not rateData then | |||
-- return NOT_APPLICABLE | |||
-- end | |||
-- return rateData[resource] or NOT_APPLICABLE | |||
-- end | |||
-- attempt to retrieve other data if none has been returned yet | |||
return valueFindRecursive(buildingData, targetData, resource, biome) | |||
end | end | ||
} | } | ||
Latest revision as of 20:47, 16 February 2026
Documentation for this module may be created at Module:DataFetch Test/doc
local NOT_APPLICABLE = "N/A"
local title = mw.title.new("Module:DataFetch/data.json")
local data = title and title.exists and mw.text.jsonDecode(title:getContent())
assert(data, "Data failed to load. Please check \"Module:DataFetch/data.json\" exists.")
local biomeKeys = {
wood = "w",
stone = "s",
earth = "e",
arctic = "a"
}
-- if the biome argument is the name of the biome rather than its letter, return the corresponding letter
local function getBiomeKey(biomeName)
return biomeKeys[string.lower(biomeName)] or biomeName
end
-- returns first argument that is not an empty string
local function getValidArg(...)
for i = 1, select("#", ...) do
local arg = select(i, ...)
if arg and arg ~= "" then
return arg
end
end
end
local function valueFindRecursive(t, ...)
for i = 1, select("#", ...) do
local k = select(i, ...)
local v = t[k]
if type(v) == "table" then
return valueFindRecursive(v, ...)
end
if v ~= nil then
return v
end
end
return NOT_APPLICABLE
end
return {
-- Universal getter for any property, for use with Template:BuildingData
GetBuildingData = function(f)
local args = f.args
local targetData = getValidArg(args.data)
local biome = getBiomeKey(getValidArg(args.biome))
local resource = getValidArg(args.resource, args.res)
local name = getValidArg(args.name)
local buildingData = data[name]
if not buildingData then
return NOT_APPLICABLE
end
-- if targetData == "cost" then
-- local costData = buildingData.cost
-- if not costData then
-- return NOT_APPLICABLE
-- end
-- local biomeValues = costData[getBiomeKey(biome)]
-- return biomeValues[resource] or NOT_APPLICABLE
-- elseif targetData == "rate" then
-- local rateData = buildingData.rate
-- if not rateData then
-- return NOT_APPLICABLE
-- end
-- return rateData[resource] or NOT_APPLICABLE
-- elseif targetData == "balance" then
-- local rateData = buildingData.balance
-- if not rateData then
-- return NOT_APPLICABLE
-- end
-- return rateData[resource] or NOT_APPLICABLE
-- end
-- attempt to retrieve other data if none has been returned yet
return valueFindRecursive(buildingData, targetData, resource, biome)
end
}