Módulo:Protect
Este metamódulo [en] simplifica o tratamento de erros em outros módulos. Ele transforma uma função, que pode gerar um erro, em uma função, que nesse caso retorna uma mensagem de erro especificada.
Uso
editar local protect = require('Módulo:Protect')
local protectedFunc = protect(func, errFormat, options)
Argumentos
editarfunc
- Função a ser transformada.
errFormat
(padrão:'Erro: %s'
)- Mensagem de erro personalizada.
- Utilize
'%s'
para incluir a mensagem a partir de um erro capturado.
options
– tabela opcional com os seguintes campos:raw
(padrão: false)- Se for verdadeiro (true), então
errFormat
será usado como está, caso não, será colocado dentro de uma marcação (tag)<strong class="error">
.
- Se for verdadeiro (true), então
removeLocation
(padrão: true)- Se for verdadeiro (true), remove as informações de localização das mensagens de erro capturadas.
Valor de retorno
editarO protectedFunc
resultante é uma função, que chama a função original func
, passando todos os argumentos para ela, e retorna todos os seus valores de retorno. Se func
gerar um erro, a mensagem de erro especificada será retornada.
Exemplo
editarlocal protect = require('Módulo:Protect')
local p = {}
function p.main(frame)
if not frame.args[1] then
error('argumento faltando')
end
return frame.args[1]
end
p.main = protect(p.main)
return p
Invocar a função principal sem argumentos resultará em: Erro: argumento faltando
A documentação acima é transcluída de Módulo:Protect/doc. (editar | histórico) Editores podem experimentar nas páginas de teste (editar | dif) e de exemplos para testes (criar) deste módulo. Subpáginas deste módulo. |
local function processResult(options, success, ...)
if not success then
local message = tostring(... or '(nenhuma mensagem)')
if options.removeLocation then
message = string.gsub(message, '^Módulo:[^:]+:%d+: ', '', 1)
end
return string.format(options.errFormat, message)
end
return ...
end
local function protect(func, errFormat, options)
if type(errFormat) == 'table' then
options = options or errFormat
errFormat = nil
end
options = mw.clone(options) or {}
options.errFormat = errFormat or options.errFormat or 'Erro: %s'
if not options.raw then
options.errFormat = '<strong class="error">' .. options.errFormat .. '</strong>'
end
options.removeLocation = options.removeLocation == nil or options.removeLocation
return function (...)
return processResult(options, pcall(func, ...))
end
end
return protect