Add Opencode::ErrorReporter pluggable adapter
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)
}
This commit is contained in:
34
lib/opencode/error_reporter.rb
Normal file
34
lib/opencode/error_reporter.rb
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# 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
|
||||||
Reference in New Issue
Block a user