Module:Sandbox

From Path of Exile Wiki
Revision as of 10:02, 14 March 2017 by >OmegaK2
Jump to navigation Jump to search
Module documentation[view] [edit] [history] [purge]


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/.

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