Exception: BugBunny::RemoteError

Inherits:
ServerError show all
Defined in:
lib/bug_bunny/remote_error.rb

Overview

Error 500 especial que propagationa información de una excepción remota.

Cuando un controller levanta una excepción no manejada en el worker, esta clase permite al llamador RPC acceder a:

  • La clase original de la excepción (ej: ActiveRecord::RecordNotFound)

  • El mensaje original

  • El backtrace completo para debugging

Mantiene compatibilidad hacia atrás: si la respuesta no contiene bug_bunny_exception, se comporta como un InternalServerError común.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(original_class, message, backtrace) ⇒ RemoteError

Inicializa la excepción remota propagada desde el worker.

Parameters:

  • original_class (String)

    Nombre completo de la clase de la excepción.

  • message (String)

    Mensaje de la excepción.

  • backtrace (Array<String>)

    Stack trace completo.



42
43
44
45
46
47
48
# File 'lib/bug_bunny/remote_error.rb', line 42

def initialize(original_class, message, backtrace)
  @original_class = original_class
  @original_message = message
  @original_backtrace = backtrace || []
  super(message)
  set_backtrace(backtrace || [])
end

Instance Attribute Details

#original_backtraceArray<String> (readonly)

Returns El backtrace original de la excepción.

Returns:

  • (Array<String>)

    El backtrace original de la excepción.



22
23
24
# File 'lib/bug_bunny/remote_error.rb', line 22

def original_backtrace
  @original_backtrace
end

#original_classString (readonly)

Returns La clase de la excepción remota (ej: ‘ActiveRecord::RecordNotFound’).

Returns:

  • (String)

    La clase de la excepción remota (ej: ‘ActiveRecord::RecordNotFound’).



16
17
18
# File 'lib/bug_bunny/remote_error.rb', line 16

def original_class
  @original_class
end

#original_messageString (readonly)

Returns El mensaje original de la excepción.

Returns:

  • (String)

    El mensaje original de la excepción.



19
20
21
# File 'lib/bug_bunny/remote_error.rb', line 19

def original_message
  @original_message
end

Class Method Details

.serialize(exception, max_lines: 25) ⇒ Hash

Serializa una excepción para transmitirse como parte de la respuesta.

Parameters:

  • exception (StandardError)

    La excepción a serializar.

  • max_lines (Integer) (defaults to: 25)

    Máximo de líneas del backtrace (default 25).

Returns:

  • (Hash)

    Estructura con class, message y backtrace.



29
30
31
32
33
34
35
# File 'lib/bug_bunny/remote_error.rb', line 29

def self.serialize(exception, max_lines: 25)
  {
    class: exception.class.name,
    message: exception.message,
    backtrace: exception.backtrace&.first(max_lines) || []
  }
end

Instance Method Details

#to_sString

Returns Representación legible de la excepción.

Returns:

  • (String)

    Representación legible de la excepción.



51
52
53
# File 'lib/bug_bunny/remote_error.rb', line 51

def to_s
  "#{self.class.name}(#{original_class}): #{super}"
end