Metaprogrammazione wrap exception

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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs