Sha256: 4d96975c1f0b04b3b95d89433d6098c0ee433aa8d9d284d675df6dc9554f85c5

Contents?: true

Size: 1.16 KB

Versions: 1

Compression:

Stored size: 1.16 KB

Contents

module Bugsnag::Breadcrumbs
  class OnBreadcrumbCallbackList
    def initialize(configuration)
      @callbacks = Set.new
      @mutex = Mutex.new
      @configuration = configuration
    end

    ##
    # @param callback [Proc, Method, #call]
    # @return [void]
    def add(callback)
      @mutex.synchronize do
        @callbacks.add(callback)
      end
    end

    ##
    # @param callback [Proc, Method, #call]
    # @return [void]
    def remove(callback)
      @mutex.synchronize do
        @callbacks.delete(callback)
      end
    end

    ##
    # @param breadcrumb [Breadcrumb]
    # @return [void]
    def call(breadcrumb)
      @callbacks.each do |callback|
        begin
          should_continue = callback.call(breadcrumb)
        rescue StandardError => e
          @configuration.warn("Error occurred in on_breadcrumb callback: '#{e}'")
          @configuration.warn("on_breadcrumb callback stacktrace: #{e.backtrace.inspect}")
        end

        # only stop if should_continue is explicity 'false' to allow callbacks
        # to return 'nil'
        if should_continue == false
          breadcrumb.ignore!
          break
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bugsnag-6.27.1 lib/bugsnag/breadcrumbs/on_breadcrumb_callback_list.rb