1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 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
|
# frozen_string_literal: true
require "sentry/breadcrumb"
module Sentry
class BreadcrumbBuffer
DEFAULT_SIZE = 100
include Enumerable
# @return [Array]
attr_accessor :buffer
# @param size [Integer, nil] If it's not provided, it'll fallback to DEFAULT_SIZE
def initialize(size = nil)
@buffer = Array.new(size || DEFAULT_SIZE)
end
# @param crumb [Breadcrumb]
# @return [void]
def record(crumb)
yield(crumb) if block_given?
@buffer.slice!(0)
@buffer << crumb
end
# @return [Array]
def members
@buffer.compact
end
# Returns the last breadcrumb stored in the buffer. If the buffer it's empty, it returns nil.
# @return [Breadcrumb, nil]
def peek
members.last
end
# Iterates through all breadcrumbs.
# @param block [Proc]
# @yieldparam crumb [Breadcrumb]
# @return [Array]
def each(&block)
members.each(&block)
end
# @return [Boolean]
def empty?
members.none?
end
# @return [Hash]
def to_hash
{
values: members.map(&:to_hash)
}
end
# @return [BreadcrumbBuffer]
def dup
copy = super
copy.buffer = buffer.deep_dup
copy
end
end
end
|