Могу ли я перейти к производным классам из базового класса? - PullRequest
0 голосов
/ 28 июня 2019

Я хочу добавить модуль ко всем производным классам.

Но скучно, что пишет prepend GenericFooException во все файлы.

(мрачный тон.) Как легко написать?

module GenericFooException
  class FooException < StandardError; end

  def perform
    super
  rescue FooException => e
    # The truth is that rails ActiveRecord::ActiveRecordError with .cause 
    puts "[CATCH] #{e.class}"
  end
end

module Foo
  class Base
    prepend GenericFooException

    def perform
      raise RuntimeError
    end 
  end
end

# It is my best. but can not catch the FooException
module Foo
  class Alice < Base
    class AliceException < FooException; end

    def perform
      raise AliceException
    end
  end
end

# Work it.
module Foo
  class Bob < Base
    prepend GenericFooException
    class BobException < FooException; end

    def perform
      raise BobException
    end
  end
end

Foo::Alice.new.perform #=> (exception)Foo::Alice::AliceException
Foo::Bob.new.perform #=> (output)[CATCH] Foo::Bob::BobException
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...