¿Dónde definir los tipos de error personalizados en Ruby y / o Rails?

¿Existe alguna práctica recomendada para definir tipos de error personalizados en una biblioteca Ruby (gema) o una aplicación Ruby on Rails? Específicamente

¿Dónde pertenecen estructuralmente en el proyecto? ¿Un archivo separado, alineado con la definición de módulo / clase relevante, en otro lugar? ¿Hay alguna convención que establezca cuándo y cuandoNo crear un nuevo tipo de error?

Diferentes bibliotecas tienen diferentes formas de hacer las cosas, y no he notado ningún patrón real. Algunas bibliotecas siempre usan tipos de error personalizados, mientras que otras no las usan en absoluto; algunos tienen todos los errores que extienden StandardError mientras que otros tienen jerarquías anidadas; algunos son solo definiciones de clase vacías, otros tienen todo tipo de trucos ingeniosos.

Oh, y solo porque siento que llamar a estos "tipos de error" es algo ambiguo, lo que quiero decir es esto:

class AuthenticationError < StandardError; end
class InvalidUsername < AuthenticationError; end

Respuestas a la pregunta(5)

Su respuesta a la pregunta