warframe

Documentation for this module may be created at Module:Mods/csv2/doc

---	Outputs a CSV text based on data in Module:Mods/data. See [[Mod/CSV]]
--	for sample output.
--	
--	@module		mods/csv
--	@alias		p
--	@author		
--	@require	[[Module:Version]]
--	@require	[[Module:Mods/data]]
--	@release	stable
--	<nowiki>

local p = {}

local Version = require('Module:Version')
local ModData = mw.loadData('Module:Mods/data')["Mods"]

---	Generic CSV builder for mods.
--	@function		p._csvModTable
--	@param			{table} columnDefinition Table of column keys that directly map to key names in [[Module:Mods/data]]
--	@return			{string} Preformatted text of CSV text
function p._csvModTable(columnDefinition)
	local tableEntryTemplate = {}	-- Would look like '%s,%s,%s'
	
	for i, _ in ipairs(columnDefinition) do table.insert(tableEntryTemplate, '%s,') end
	tableEntryTemplate[#tableEntryTemplate] = '%s'	-- Last column
	tableEntryTemplate = table.concat(tableEntryTemplate)
	
	local csvResult = {}
	table.insert(csvResult, string.format(tableEntryTemplate, unpack(columnDefinition)))
	
	for _, modEntry in pairs(ModData) do
		local tableEntryValues = {}
		
		for _, keyName in ipairs(columnDefinition) do
			local v
			-- IntroducedDate doesn't actually exist in M:Mods/data
			-- TODO: Update M:Mods to support derived key getters similar to M:Weapons
			if (keyName == 'IntroducedDate') then
				v = Version._getVersionDate(modEntry['Introduced'] or "999")
			else
				v = modEntry[keyName]
				-- Serializing table to a string
				if (type(v) == 'table') then
					v = table.concat(v, '|')
				end
			end
			table.insert(tableEntryValues, tostring(v))
		end
		
		local tableEntry = string.format(tableEntryTemplate, unpack(tableEntryValues))
		table.insert(csvResult, tableEntry)
	end
	
	return table.concat(csvResult, '\n')
end
	
---	Builds a CSV table of all WARFRAME's mods.
--	@function		p._csvModComparisonTable
--	@returns		{string} Preformatted text of CSV text
function p._csvModComparisonTable()
	-- Header names will also be key names in Module:Mods/data
	-- Update this if you want more CSV columns
	local tableHeader = { 
		'Introduced',
		'IntroducedDate',
		'Name',
		}
	
	return p._csvModTable(tableHeader)
end

---	Builds a CSV table of all WARFRAME's guns with the exception of Kitguns.
--	@function		p.csvModTable
--	@returns		{string} Preformatted text of CSV text
function p.csvModTable(frame)
	return '<pre>'..p._csvModComparisonTable()..'</pre>'
end

return p