Class: Julewire::Rails::Subscribers::RenderedException

Inherits:
Object
  • Object
show all
Extended by:
Core::Integration::SubscriberInstall
Defined in:
lib/julewire/rails/subscribers/rendered_exception.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(configuration = Configuration.new) ⇒ RenderedException

Returns a new instance of RenderedException.



32
33
34
# File 'lib/julewire/rails/subscribers/rendered_exception.rb', line 32

def initialize(configuration = Configuration.new)
  @configuration = configuration
end

Instance Attribute Details

#configuration=(value) ⇒ Object (writeonly)

Sets the attribute configuration

Parameters:

  • value

    the value to set the attribute configuration to.



36
37
38
# File 'lib/julewire/rails/subscribers/rendered_exception.rb', line 36

def configuration=(value)
  @configuration = value
end

Class Method Details

.install!(configuration) ⇒ Object



12
13
14
15
16
17
18
19
20
21
# File 'lib/julewire/rails/subscribers/rendered_exception.rb', line 12

def install!(configuration)
  return reset! unless configuration.request_summary? || configuration.rendered_exceptions?
  return unless defined?(::ActionDispatch::DebugExceptions)
  return unless ::ActionDispatch::DebugExceptions.respond_to?(:register_interceptor)

  install_subscriber(configuration, enabled: true) do |subscriber|
    ::ActionDispatch::DebugExceptions.register_interceptor(subscriber)
    -> { unregister_interceptor(subscriber) }
  end
end

Instance Method Details

#call(request, exception) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/julewire/rails/subscribers/rendered_exception.rb', line 38

def call(request, exception)
  return if Suppression.active?

  wrapper = exception_wrapper(request, exception)
  return unless showable_response?(request, wrapper)

  capture_request_error(request, exception, wrapper)
  unless @configuration.rendered_exceptions?
    IntegrationHealth.record_success(action: :call, component: :rendered_exception_subscriber)
    return
  end

  Core::Integration::Facade.emit(
    severity: severity_for(request, wrapper),
    event: "action_dispatch.rendered_exception",
    logger: "ActionDispatch::DebugExceptions",
    source: @configuration.source,
    attributes: attributes_for(request, wrapper),
    neutral: neutral_for(request, wrapper),
    error: exception
  )
  IntegrationHealth.record_success(action: :call, component: :rendered_exception_subscriber)
rescue StandardError => e
  IntegrationHealth.record_failure(
    e,
    action: :call,
    component: :rendered_exception_subscriber
  )
end