Существует ли наилучшая практика для определения пользовательских типов ошибок в библиотеке Ruby (gem) или Ruby on Rails? В частности:
- Где они принадлежат структурно в проекте? Отдельный файл, связанный с соответствующим определением модуля/класса, где-то еще?
- Существуют ли какие-либо соглашения, устанавливающие, когда и когда не создавать новый тип ошибки?
В разных библиотеках есть разные способы делать вещи, и я не заметил никаких реальных шаблонов. Некоторые библиотеки всегда используют собственные типы ошибок, а другие вообще не используют их; некоторые из них имеют все ошибки, распространяющие StandardError, в то время как другие имеют вложенные иерархии; некоторые из них - просто пустые определения классов, другие - всевозможные умные трюки.
О, и только потому, что я чувствую, что называть эти "типы ошибок" является своего рода неоднозначным, я имею в виду следующее:
class AuthenticationError < StandardError; end
class InvalidUsername < AuthenticationError; end