Forum: Italian Ruby user group Metaprogrammazione wrap exception

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
33c7c2cca02b80f026c30039cf8e312c?d=identicon&s=25 Michele Boscolo (sphynx)
on 2016-10-25 21:21
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 topic is locked and can not be replied to.