-
-
Notifications
You must be signed in to change notification settings - Fork 20
/
breadcrumb_buffer.cr
69 lines (55 loc) · 1.1 KB
/
breadcrumb_buffer.cr
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
65
66
67
68
69
module Raven
class BreadcrumbBuffer
include Enumerable(Breadcrumb)
@@mutex = Mutex.new
@@current : self?
def self.current
@@mutex.synchronize do
@@current ||= new
end
end
def self.clear!
@@mutex.synchronize do
@@current = nil
end
end
getter buffer : Array(Breadcrumb?)
def initialize(size = 100)
@buffer = Array(Breadcrumb?).new(size, nil)
end
def record(crumb : Breadcrumb) : Nil
@buffer.shift
@buffer << crumb
end
def record(**opts, &) : Nil
crumb = Breadcrumb.new(**opts)
yield crumb
record crumb
end
def record(**opts) : Nil
record(**opts) { }
end
def record(opts : NamedTuple) : Nil
record(**opts)
end
def members : Array(Breadcrumb)
@buffer.compact
end
def peek
members.last?
end
def each(&)
members.each do |breadcrumb|
yield breadcrumb
end
end
def empty?
members.empty?
end
def to_hash
{
"values" => members.map(&.to_hash),
}
end
end
end