Module:Arguments: Difference between revisions

no edit summary
(memoize nils using a separate nilArgs table; this fixes a bug where nil values were being iterated over with pairs())
No edit summary
Line 2:
-- #invoke. It is intended for use by other Lua modules, and should not be
-- called from #invoke directly.
 
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
 
local arguments = {}
 
-- Generate four different tidyVal functions, so that we don't have to check the
-- options every time we call it.
 
local function tidyValDefault(key, val)
if type(val) == 'string' then
Line 23:
end
end
 
local function tidyValTrimOnly(key, val)
if type(val) == 'string' then
Line 31:
end
end
 
local function tidyValRemoveBlanksOnly(key, val)
if type(val) == 'string' then
Line 43:
end
end
 
local function tidyValNoChange(key, val)
return val
end
 
function arguments.getArgs(frame, options)
checkType('getArgs', 1, frame, 'table', true)
Line 53:
frame = frame or {}
options = options or {}
 
--[[
-- Get the arguments from the frame object if available. If the frame object
Line 74:
luaArgs = frame
end
-- Set the order of precedence of the argument tables. If the variables are
-- nil, nothing will be added to the table, which is how we avoid clashes
Line 81:
argTables[#argTables + 1] = pargs
argTables[#argTables + 1] = luaArgs
 
--[[
-- Generate the tidyVal function. If it has been specified by the user, we
Line 112:
end
end
 
--[[
-- Set up the args, metaArgs and nilArgs tables. args will be the one
Line 121:
local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}
setmetatable(args, metatable)
 
local function mergeArgs(iterator, tables)
--[[
Line 143:
end
end
 
--[[
-- Define metatable behaviour. Arguments are memoized in the metaArgs table,
Line 155:
-- the arguments will already have been copied over.
--]]
 
metatable.__index = function (t, key)
--[[
Line 185:
return nil
end
 
metatable.__newindex = function (t, key, val)
-- This function is called when a module tries to add a new value to the
Line 217:
end
end
 
metatable.__pairs = function ()
-- Called when pairs is run on the args table.
Line 227:
return pairs(metaArgs)
end
 
metatable.__ipairs = function ()
-- Called when ipairs is run on the args table.
Line 236:
return ipairs(metaArgs)
end
 
return args
end
 
return arguments
Anonymous user