Per the same pattern as Opencode::Instrumentation in opencode-ruby:
zero-dependency default (no-op), host plugs an adapter in to route
errors to Rails.error / Honeybadger / Sentry / etc.
Used by Session, Turn, MessageArtifacts (ported in the next commit) to
report swallowed exceptions and degraded paths without coupling the
gem to any specific error-tracking library.
# config/initializers/opencode.rb
Opencode::ErrorReporter.adapter = ->(error, **opts) {
Rails.error.report(error, **opts)
}
35 lines
1.2 KiB
Ruby
35 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Opencode
|
|
# Pluggable error-reporter adapter. opencode-rails ships with zero
|
|
# dependency on Honeybadger, Sentry, Bugsnag, Rollbar, or any specific
|
|
# error-tracking library. Host apps plug their own adapter in:
|
|
#
|
|
# # config/initializers/opencode.rb
|
|
# Opencode::ErrorReporter.adapter = ->(error, **opts) {
|
|
# Rails.error.report(error, **opts)
|
|
# }
|
|
#
|
|
# When no adapter is set (default), `.report` is a silent no-op. This
|
|
# lets the gem be used outside Rails-style apps without forcing a
|
|
# dependency on any specific error reporter, while keeping the option
|
|
# to route errors anywhere the host wants when the gem ships in a
|
|
# Rails context.
|
|
#
|
|
# Semantics mirror Rails.error.report (handled:, severity:, context:)
|
|
# but the gem doesn't enforce any specific kwarg vocabulary — whatever
|
|
# the gem code passes is forwarded verbatim to the adapter.
|
|
module ErrorReporter
|
|
class << self
|
|
attr_accessor :adapter
|
|
end
|
|
|
|
# Report an error to the configured adapter, or no-op if none set.
|
|
# Returns the adapter's return value (typically the error itself for
|
|
# `Rails.error.report`).
|
|
def self.report(error, **opts)
|
|
adapter&.call(error, **opts)
|
|
end
|
|
end
|
|
end
|