Difference between revisions of "Module:Validators/Endpoints/ValidateParameters"
m (Error message adjustment.) |
(Track if a parameter has a set default value but is marked as required. If required, shouldn't have a default value; if it has a default value, it shouldn't be a required parameter. Other minor cleanup.) |
||
Line 16: | Line 16: | ||
} | } | ||
− | local function | + | local function validateParameterSpec( parameterSchema ) |
local messages = {} | local messages = {} | ||
Line 59: | Line 59: | ||
for parameter, schema in pairs( parameters ) do | for parameter, schema in pairs( parameters ) do | ||
− | local | + | if schema.required and schema.default then |
+ | local message = ( 'Required parameter `%s` with set default value!' ) | ||
+ | :format( parameter ) | ||
− | for _, message in ipairs( | + | table.insert( messages, message ) |
+ | end | ||
+ | |||
+ | local keyValidationResult = validateParameterSpec( schema, SCHEMA_SPEC ) | ||
+ | |||
+ | for _, message in ipairs( keyValidationResult.messages ) do | ||
local newMessage = ( 'Invalid spec for parameter `%s`: %s' ) | local newMessage = ( 'Invalid spec for parameter `%s`: %s' ) | ||
:format( parameter, message ) | :format( parameter, message ) |
Latest revision as of 23:27, 27 December 2023
-- <pre>
local libraryUtil = require( 'libraryUtil' )
local SCHEMA_SPEC = {
allowEmpty = {
type = 'boolean',
required = false,
},
required = {
type = 'boolean',
required = false,
},
default = {
required = false,
}
}
local function validateParameterSpec( parameterSchema )
local messages = {}
for key, value in pairs( parameterSchema ) do
if not SCHEMA_SPEC[ key ] then
local message = ( 'Invalid schema key `%s`!' ):format( key )
table.insert( messages, message )
end
end
for key, value in pairs( SCHEMA_SPEC ) do
local parameterDescription = parameterSchema[ key ]
if not parameterDescription and value.required then
local message = ( 'Missing required option `%s`!' )
:format( key )
table.insert( messages, message )
end
local schemaKeyType = type( parameterDescription )
if parameterDescription and value.type and schemaKeyType ~= value.type then
local message = ( 'Invalid type `%s` for key `%s`! Valid type is `%s`.' )
:format( schemaKeyType, key, value.type )
table.insert( messages, message )
end
end
return {
messages = messages,
isValid = not messages[ 1 ],
}
end
local function validateParameters( parameters )
libraryUtil.checkType( 'validateParameters', 1, parameters, 'table' )
local messages = {}
for parameter, schema in pairs( parameters ) do
if schema.required and schema.default then
local message = ( 'Required parameter `%s` with set default value!' )
:format( parameter )
table.insert( messages, message )
end
local keyValidationResult = validateParameterSpec( schema, SCHEMA_SPEC )
for _, message in ipairs( keyValidationResult.messages ) do
local newMessage = ( 'Invalid spec for parameter `%s`: %s' )
:format( parameter, message )
table.insert( messages, newMessage )
end
end
return {
messages = messages,
isValid = not messages[ 1 ],
}
end
return validateParameters
-- </pre>