Абстрагирование проверки исключений - PullRequest
4 голосов
/ 02 декабря 2010

У меня есть ряд методов, которые используют одинаковую обработку исключений.

Как я могу абстрагировать проверку исключений в отдельную функцию?

См. Пример ниже, большое спасибо за помощь, ребята!

def a
  code
  begin
    rescue 1...
    rescue 2...
    rescue 3...
    rescue 4...
  end
end

def b
  code
  begin
    rescue 1...
    rescue 2...
    rescue 3...
    rescue 4...
  end
end

Ответы [ 2 ]

10 голосов
/ 02 декабря 2010

Самое простое решение - передать ваш код методу в виде блока и передать его в выражении begin / rescue:

def run_code_and_handle_exceptions
  begin
    yield
  rescue 1...
  rescue 2...
  rescue 3...
  rescue 4...
  end
end

# Elsewhere...
def a
  run_code_and_handle_exceptions do
    code
  end
end
# etc...

Возможно, вы захотите придумать более краткое имя методачем run_code_and_handle_exceptions!

1 голос
/ 02 декабря 2010

В контроллерах я использовал rescue_from -functionality. Это довольно СУХОЙ:

class HelloWorldController < ApplicationController
  rescue_from ActiveRecord::RecordNotFound, :with => :handle_unfound_record

  def handle_unfound_record
    # Exception handling...
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...