File: breadcrumb_buffer.rb

package info (click to toggle)
ruby-sentry-ruby 5.18.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 564 kB
  • sloc: ruby: 4,701; makefile: 8; sh: 4
file content (64 lines) | stat: -rw-r--r-- 1,255 bytes parent folder | download | duplicates (2)
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