Ciao a tutti, sto cercando di crearmi attraverso prepend e un po di
metaprogrammazione un modo per catturare le eccezioni per dei metodi di
classe passati come parametri.
Il modulo che mi sono creato è il seguente:
module HandleException
def self.included(base)
base.send(:extend, ClassMethods)
end
module ClassMethods
def wrap_exceptions_for(*methods)
silencer = Module.new do
methods.each do |method|
define_method method do |*args|
begin
super(*args)
rescue => e
file = e.backtrace[0].split(":")[-3].split("/").last
ln = e.backtrace[0].split(":")[-2]
message = file+":"+ln + " => " + e.message
p message
end
p “continua dentro il modulo”
end
end
end
singleton_class.prepend silencer
end
end
end
Ho creato una classe per usare il mio modulo
class RemitController
include HandleException
wrap_exceptions_for :download, :converti
class << self
def download(controparte: , **_keyword_args)
p "download"
p "continua"
end
def converti(controparte: , **_keyword_args)
p "converti"
rescue "Errore"
p "continua"
end
end
end
Il problema è che funziona tutto corretamente l’eccezione viene gestita
dal mio modulo, il problema è che il codice dopo la gestione della mia
eccezione non viene eseguito. Quindi per esempio nel metodo converti
p “continua”, non viene eseguito, ma viene eseguito
p “continua dentro il modulo”, come posso fare in modo che l’esecuzione
del programma continui eseguendo il codice dopo la mia rescue.
Grazie