Module:Sandbox: Difference between revisions
Jump to navigation
Jump to search
>OmegaK2 No edit summary |
>OmegaK2 No edit summary |
||
Line 1: | Line 1: | ||
local | local p = {} | ||
p.cases = { | |||
-- Basic test list | |||
{ | |||
parser = { | |||
explicit = { | |||
_type = 'list', | |||
}, | |||
}, | |||
input = { | |||
explicit1 = 'Test1', | |||
explicit2 = 'Test2', | |||
}, | |||
expected = { | |||
explicit = {'Test1', 'Test2'}, | |||
}, | |||
}, | |||
-- Basic test table | |||
{ | |||
parser = { | |||
stat = { | |||
_type = 'table', | |||
id = {}, | |||
value = {}, | |||
}, | |||
}, | |||
input = { | |||
stat1_id = 'test1', | |||
stat1_value = '1', | |||
stat2_id = 'test2', | |||
stat2_value = '2', | |||
}, | |||
expected = { | |||
stat = { | |||
[1] = { | |||
id = 'test1', | |||
value = '1', | |||
}, | |||
[2] = { | |||
id = 'test2', | |||
value = '2', | |||
}, | |||
}, | |||
}, | |||
}, | |||
-- Test nested table | |||
{ | |||
parser = { | |||
stat_column = { | |||
_type = 'table', | |||
header = { | |||
_func = nil, | |||
_type = nil, | |||
}, | |||
format = { | |||
_func = nil, | |||
_type = nil, | |||
}, | |||
stat_format = { | |||
_func = nil, | |||
_type = nil, | |||
}, | |||
stat = { | |||
_type = 'list', | |||
--id = { | |||
-- _func = nil, | |||
-- _type = nil, | |||
--}, | |||
}, | |||
}, | |||
}, | |||
input = { | |||
stat_column1_header = 'Local Attack<br>Chaos Damage', | |||
stat_column1_format = '%s-%s', | |||
stat_column1_stat_format = 'separate', | |||
stat_column1_stat1_id = 'local_minimum_added_chaos_damage', | |||
stat_column1_stat2_id = 'local_maximum_added_chaos_damage', | |||
stat_column2_header = 'Global Attack<br>Chaos Damage', | |||
stat_column2_format = '%s-%s', | |||
stat_column2_stat_format = 'separate', | |||
stat_column2_stat1_id = 'attack_minimum_added_chaos_damage', | |||
stat_column2_stat2_id = 'attack_minimum_added_chaos_damage', | |||
}, | |||
expected = { | |||
stat_column = { | |||
[1] = { | |||
header = 'Local Attack<br>Chaos Damage', | |||
format = '%s-%s', | |||
stat_format = 'separate', | |||
stat = { | |||
[1] = { | |||
id = 'local_minimum_added_chaos_damage', | |||
}, | |||
[2] = { | |||
id = 'local_maximum_added_chaos_damage', | |||
}, | |||
}, | |||
}, | |||
[2] = { | |||
header = 'Global Attack<br>Chaos Damage', | |||
format = '%s-%s', | |||
stat_format = 'separate', | |||
stat = { | |||
[1] = { | |||
id = 'attack_minimum_added_chaos_damage', | |||
}, | |||
[2] = { | |||
id = 'attack_minimum_added_chaos_damage', | |||
}, | |||
}, | |||
}, | |||
}, | |||
}, | |||
}, | |||
} | |||
function p. | function p.validator(args, parser, prefix) | ||
local rtr = {} | |||
prefix = prefix or '' | |||
for key, data in pairs(parser) do | |||
local pkey = prefix .. key | |||
if data._type == 'table' then | |||
local i = 1 | |||
local stop = false | |||
local tbl = {} | |||
repeat | |||
local result = p.validator(args, data, string.format('%s%s_', pkey, i)) | |||
-- As long there was one entry, it is valid | |||
local count = 0 | |||
for _ in pairs(result) do | |||
count = count + 1 | |||
break | |||
end | |||
-- Stop if we don't get any results anymore | |||
if count == 0 then | |||
stop = true | |||
else | |||
tbl[#tbl+1] = result | |||
i = i + 1 | |||
end | |||
until stop == true | |||
rtr[key] = tbl | |||
elseif data._type == 'list' then | |||
local i = 1 | |||
local stop = false | |||
local tbl = {} | |||
repeat | |||
local result = args[pkey .. i] | |||
if data._func ~= nil then | |||
result = data._func(result) | |||
end | |||
if result == nil then | |||
stop = true | |||
else | |||
tbl[#tbl+1] = result | |||
i = i + 1 | |||
end | |||
until stop == true | |||
rtr[key] = tbl | |||
else | |||
local result = args[pkey] | |||
if data._func ~= nil then | |||
result = data._func(result) | |||
end | |||
rtr[key] = result | |||
end | |||
end | |||
return rtr | |||
end | end | ||
return p | return p |
Revision as of 10:02, 14 March 2017
This page is not an actual Scribunto module. It exists to provide editors a place to create experimental modules.
Naming your modules
To keep things tidy, please use the following format to name your experimental modules:
Module:Sandbox/Your username/Module name
Cleaning up unused modules
Experimental modules may be deleted by admins upon request or after a long period of inactivity.
List of modules in this area
For a list of the experimental modules under Module:Sandbox, see Special:PrefixIndex/Module:Sandbox/.
The above documentation is transcluded from Module:Sandbox/doc.
Editors can experiment in this module's sandbox and testcases pages.
Subpages of this module.
Editors can experiment in this module's sandbox and testcases pages.
Subpages of this module.
local p = {}
p.cases = {
-- Basic test list
{
parser = {
explicit = {
_type = 'list',
},
},
input = {
explicit1 = 'Test1',
explicit2 = 'Test2',
},
expected = {
explicit = {'Test1', 'Test2'},
},
},
-- Basic test table
{
parser = {
stat = {
_type = 'table',
id = {},
value = {},
},
},
input = {
stat1_id = 'test1',
stat1_value = '1',
stat2_id = 'test2',
stat2_value = '2',
},
expected = {
stat = {
[1] = {
id = 'test1',
value = '1',
},
[2] = {
id = 'test2',
value = '2',
},
},
},
},
-- Test nested table
{
parser = {
stat_column = {
_type = 'table',
header = {
_func = nil,
_type = nil,
},
format = {
_func = nil,
_type = nil,
},
stat_format = {
_func = nil,
_type = nil,
},
stat = {
_type = 'list',
--id = {
-- _func = nil,
-- _type = nil,
--},
},
},
},
input = {
stat_column1_header = 'Local Attack<br>Chaos Damage',
stat_column1_format = '%s-%s',
stat_column1_stat_format = 'separate',
stat_column1_stat1_id = 'local_minimum_added_chaos_damage',
stat_column1_stat2_id = 'local_maximum_added_chaos_damage',
stat_column2_header = 'Global Attack<br>Chaos Damage',
stat_column2_format = '%s-%s',
stat_column2_stat_format = 'separate',
stat_column2_stat1_id = 'attack_minimum_added_chaos_damage',
stat_column2_stat2_id = 'attack_minimum_added_chaos_damage',
},
expected = {
stat_column = {
[1] = {
header = 'Local Attack<br>Chaos Damage',
format = '%s-%s',
stat_format = 'separate',
stat = {
[1] = {
id = 'local_minimum_added_chaos_damage',
},
[2] = {
id = 'local_maximum_added_chaos_damage',
},
},
},
[2] = {
header = 'Global Attack<br>Chaos Damage',
format = '%s-%s',
stat_format = 'separate',
stat = {
[1] = {
id = 'attack_minimum_added_chaos_damage',
},
[2] = {
id = 'attack_minimum_added_chaos_damage',
},
},
},
},
},
},
}
function p.validator(args, parser, prefix)
local rtr = {}
prefix = prefix or ''
for key, data in pairs(parser) do
local pkey = prefix .. key
if data._type == 'table' then
local i = 1
local stop = false
local tbl = {}
repeat
local result = p.validator(args, data, string.format('%s%s_', pkey, i))
-- As long there was one entry, it is valid
local count = 0
for _ in pairs(result) do
count = count + 1
break
end
-- Stop if we don't get any results anymore
if count == 0 then
stop = true
else
tbl[#tbl+1] = result
i = i + 1
end
until stop == true
rtr[key] = tbl
elseif data._type == 'list' then
local i = 1
local stop = false
local tbl = {}
repeat
local result = args[pkey .. i]
if data._func ~= nil then
result = data._func(result)
end
if result == nil then
stop = true
else
tbl[#tbl+1] = result
i = i + 1
end
until stop == true
rtr[key] = tbl
else
local result = args[pkey]
if data._func ~= nil then
result = data._func(result)
end
rtr[key] = result
end
end
return rtr
end
return p