Как определить метод спасения для класса Timeout::error?

У меня есть класс, который использует savon в качестве драгоценного камня для общения с SOAP API. Время от времени сервер недоступен, поэтому методы, которые реализуют методы мыла, Timeout::Error, Это не проблема, чтобы осуществить спасение как это:

begin 
  ...
rescue Timeour::Error 
  ...
end

Но у меня есть ~50 определенных методов, которые могут быть затронуты, и я не хочу повторять один и тот же код 50 раз. Это абсолютно не сухой. Есть ли способ справиться с этим? Я уже думал о чем-то вроде этого:

def safe_call method, params
  begin
    self.send method, params
  rescue Timeour::Error
    # do sth heroic to rescue the method
  end
end

Но это довольно неприятно, потому что я должен менять каждый вызов во всех сценариях, которые используют класс. Есть ли способ сделать спасение всего класса?

1 ответ

Решение

Я думаю, что вы можете использовать rescue_from. Вы можете прочитать об этом здесь: http://api.rubyonrails.org/classes/ActiveSupport/Rescuable/ClassMethods.html

Короче говоря, вы можете поместить это в свой контроллер приложений:

rescue_from 'Timeout::Error' do |exception|
  # Rescue logic here.
end
Другие вопросы по тегам