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