Мне часто приходится бросать пользовательскую (ized) ошибку. Например, когда ресурс не может быть найден из-за несоответствия параметров или так.
Я предпочитаю бросать существующие ошибки или бросать ошибку, которая унаследована от существующей ошибки. Таким образом, я не представляю классы ошибок, которые уже были определены и могут быть использованы отлично (DRY). Но это также позволяет сохранить формулировку и стиль одинаково, наследуя и просто меняя слово или два, чтобы прояснить разницу с исходной ошибкой.
Например:
Foo.new
Foo.some_external_id = nil
Foo.fetch_external_resource
# => InvalidOptions: Calling Foo#fetch_external_resource with nil is invalid
Я уверен, что такие ошибки уже определены. Фактически, после прочтения многих строк кода, я обнаружил, что мой драйвер MongoID имеет Mongoid::Errors::InvalidOptions: Calling Document#find with nil is invalid
.
Есть ли список доступных классов ошибок в Ruby Core и Ruby on Rails? Есть ли способ получить такой список для вашего текущего проекта?
Является ли вообще разумным повторное использование и/или наследование существующих ошибок, или я должен сохранить собственный собственный пользовательский набор?