airbrake-ruby 4.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/airbrake-ruby.rb +515 -0
- data/lib/airbrake-ruby/async_sender.rb +80 -0
- data/lib/airbrake-ruby/backtrace.rb +196 -0
- data/lib/airbrake-ruby/benchmark.rb +39 -0
- data/lib/airbrake-ruby/code_hunk.rb +51 -0
- data/lib/airbrake-ruby/config.rb +229 -0
- data/lib/airbrake-ruby/config/validator.rb +91 -0
- data/lib/airbrake-ruby/deploy_notifier.rb +36 -0
- data/lib/airbrake-ruby/file_cache.rb +54 -0
- data/lib/airbrake-ruby/filter_chain.rb +95 -0
- data/lib/airbrake-ruby/filters/context_filter.rb +29 -0
- data/lib/airbrake-ruby/filters/dependency_filter.rb +31 -0
- data/lib/airbrake-ruby/filters/exception_attributes_filter.rb +46 -0
- data/lib/airbrake-ruby/filters/gem_root_filter.rb +33 -0
- data/lib/airbrake-ruby/filters/git_last_checkout_filter.rb +92 -0
- data/lib/airbrake-ruby/filters/git_repository_filter.rb +64 -0
- data/lib/airbrake-ruby/filters/git_revision_filter.rb +66 -0
- data/lib/airbrake-ruby/filters/keys_blacklist.rb +49 -0
- data/lib/airbrake-ruby/filters/keys_filter.rb +140 -0
- data/lib/airbrake-ruby/filters/keys_whitelist.rb +48 -0
- data/lib/airbrake-ruby/filters/root_directory_filter.rb +28 -0
- data/lib/airbrake-ruby/filters/sql_filter.rb +125 -0
- data/lib/airbrake-ruby/filters/system_exit_filter.rb +23 -0
- data/lib/airbrake-ruby/filters/thread_filter.rb +92 -0
- data/lib/airbrake-ruby/hash_keyable.rb +37 -0
- data/lib/airbrake-ruby/ignorable.rb +44 -0
- data/lib/airbrake-ruby/inspectable.rb +39 -0
- data/lib/airbrake-ruby/loggable.rb +34 -0
- data/lib/airbrake-ruby/monotonic_time.rb +43 -0
- data/lib/airbrake-ruby/nested_exception.rb +38 -0
- data/lib/airbrake-ruby/notice.rb +162 -0
- data/lib/airbrake-ruby/notice_notifier.rb +134 -0
- data/lib/airbrake-ruby/performance_breakdown.rb +46 -0
- data/lib/airbrake-ruby/performance_notifier.rb +155 -0
- data/lib/airbrake-ruby/promise.rb +109 -0
- data/lib/airbrake-ruby/query.rb +54 -0
- data/lib/airbrake-ruby/request.rb +46 -0
- data/lib/airbrake-ruby/response.rb +74 -0
- data/lib/airbrake-ruby/stashable.rb +15 -0
- data/lib/airbrake-ruby/stat.rb +73 -0
- data/lib/airbrake-ruby/sync_sender.rb +113 -0
- data/lib/airbrake-ruby/tdigest.rb +393 -0
- data/lib/airbrake-ruby/thread_pool.rb +128 -0
- data/lib/airbrake-ruby/time_truncate.rb +17 -0
- data/lib/airbrake-ruby/timed_trace.rb +58 -0
- data/lib/airbrake-ruby/truncator.rb +115 -0
- data/lib/airbrake-ruby/version.rb +6 -0
- data/spec/airbrake_spec.rb +324 -0
- data/spec/async_sender_spec.rb +72 -0
- data/spec/backtrace_spec.rb +427 -0
- data/spec/benchmark_spec.rb +33 -0
- data/spec/code_hunk_spec.rb +115 -0
- data/spec/config/validator_spec.rb +184 -0
- data/spec/config_spec.rb +154 -0
- data/spec/deploy_notifier_spec.rb +48 -0
- data/spec/file_cache_spec.rb +34 -0
- data/spec/filter_chain_spec.rb +92 -0
- data/spec/filters/context_filter_spec.rb +23 -0
- data/spec/filters/dependency_filter_spec.rb +12 -0
- data/spec/filters/exception_attributes_filter_spec.rb +50 -0
- data/spec/filters/gem_root_filter_spec.rb +41 -0
- data/spec/filters/git_last_checkout_filter_spec.rb +46 -0
- data/spec/filters/git_repository_filter.rb +61 -0
- data/spec/filters/git_revision_filter_spec.rb +126 -0
- data/spec/filters/keys_blacklist_spec.rb +225 -0
- data/spec/filters/keys_whitelist_spec.rb +194 -0
- data/spec/filters/root_directory_filter_spec.rb +39 -0
- data/spec/filters/sql_filter_spec.rb +262 -0
- data/spec/filters/system_exit_filter_spec.rb +14 -0
- data/spec/filters/thread_filter_spec.rb +277 -0
- data/spec/fixtures/notroot.txt +7 -0
- data/spec/fixtures/project_root/code.rb +221 -0
- data/spec/fixtures/project_root/empty_file.rb +0 -0
- data/spec/fixtures/project_root/long_line.txt +1 -0
- data/spec/fixtures/project_root/short_file.rb +3 -0
- data/spec/fixtures/project_root/vendor/bundle/ignored_file.rb +5 -0
- data/spec/helpers.rb +9 -0
- data/spec/ignorable_spec.rb +14 -0
- data/spec/inspectable_spec.rb +45 -0
- data/spec/monotonic_time_spec.rb +12 -0
- data/spec/nested_exception_spec.rb +73 -0
- data/spec/notice_notifier/options_spec.rb +259 -0
- data/spec/notice_notifier_spec.rb +356 -0
- data/spec/notice_spec.rb +296 -0
- data/spec/performance_breakdown_spec.rb +12 -0
- data/spec/performance_notifier_spec.rb +491 -0
- data/spec/promise_spec.rb +197 -0
- data/spec/query_spec.rb +11 -0
- data/spec/request_spec.rb +11 -0
- data/spec/response_spec.rb +88 -0
- data/spec/spec_helper.rb +100 -0
- data/spec/stashable_spec.rb +23 -0
- data/spec/stat_spec.rb +47 -0
- data/spec/sync_sender_spec.rb +133 -0
- data/spec/tdigest_spec.rb +230 -0
- data/spec/thread_pool_spec.rb +158 -0
- data/spec/time_truncate_spec.rb +13 -0
- data/spec/timed_trace_spec.rb +125 -0
- data/spec/truncator_spec.rb +238 -0
- metadata +216 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
RSpec.describe Airbrake::TimeTruncate do
|
2
|
+
describe "#utc_truncate_minutes" do
|
3
|
+
it "truncates time to the floor minute and returns an RFC3339 timestamp" do
|
4
|
+
time = Time.new(2018, 1, 1, 0, 0, 20, 0)
|
5
|
+
expect(subject.utc_truncate_minutes(time)).to eq('2018-01-01T00:00:00+00:00')
|
6
|
+
end
|
7
|
+
|
8
|
+
it "converts time with zone to UTC" do
|
9
|
+
time = Time.new(2018, 1, 1, 0, 0, 20, '-05:00')
|
10
|
+
expect(subject.utc_truncate_minutes(time)).to eq('2018-01-01T05:00:00+00:00')
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
RSpec.describe Airbrake::TimedTrace do
|
2
|
+
describe ".span" do
|
3
|
+
it "returns a timed trace" do
|
4
|
+
expect(described_class.span('operation') {}).to be_a(described_class)
|
5
|
+
end
|
6
|
+
|
7
|
+
it "returns a timed trace with a stopped span" do
|
8
|
+
timed_trace = described_class.span('operation') {}
|
9
|
+
expect(timed_trace.spans).to match('operation' => be > 0)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "#span" do
|
14
|
+
it "captures a span" do
|
15
|
+
subject.span('operation') {}
|
16
|
+
expect(subject.spans).to match('operation' => be > 0)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#start_span" do
|
21
|
+
context "when called once" do
|
22
|
+
it "returns true" do
|
23
|
+
expect(subject.start_span('operation')).to eq(true)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context "when called multiple times" do
|
28
|
+
before { subject.start_span('operation') }
|
29
|
+
|
30
|
+
it "returns false" do
|
31
|
+
expect(subject.start_span('operation')).to eq(false)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "when another span was started" do
|
36
|
+
before { subject.start_span('operation') }
|
37
|
+
|
38
|
+
it "returns true" do
|
39
|
+
expect(subject.start_span('another operation')).to eq(true)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context "when #spans was called" do
|
44
|
+
before { subject.start_span('operation') }
|
45
|
+
|
46
|
+
it "returns spans with zero values" do
|
47
|
+
expect(subject.spans).to eq('operation' => 0.0)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "#stop_span" do
|
53
|
+
context "when #start_span wasn't invoked" do
|
54
|
+
it "returns false" do
|
55
|
+
expect(subject.stop_span('operation')).to eq(false)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "when #start_span was invoked" do
|
60
|
+
before { subject.start_span('operation') }
|
61
|
+
|
62
|
+
it "returns true" do
|
63
|
+
expect(subject.stop_span('operation')).to eq(true)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
context "when multiple spans were started" do
|
68
|
+
before do
|
69
|
+
subject.start_span('operation')
|
70
|
+
subject.start_span('another operation')
|
71
|
+
end
|
72
|
+
|
73
|
+
context "and when stopping in LIFO order" do
|
74
|
+
it "returns true for all spans" do
|
75
|
+
expect(subject.stop_span('another operation')).to eq(true)
|
76
|
+
expect(subject.stop_span('operation')).to eq(true)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context "and when stopping in FIFO order" do
|
81
|
+
it "returns true for all spans" do
|
82
|
+
expect(subject.stop_span('operation')).to eq(true)
|
83
|
+
expect(subject.stop_span('another operation')).to eq(true)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe "#spans" do
|
90
|
+
context "when no spans were captured" do
|
91
|
+
it "returns an empty hash" do
|
92
|
+
expect(subject.spans).to eq({})
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
context "when a span was captured" do
|
97
|
+
before do
|
98
|
+
subject.start_span('operation')
|
99
|
+
subject.stop_span('operation')
|
100
|
+
end
|
101
|
+
|
102
|
+
it "returns a Hash with the corresponding span" do
|
103
|
+
subject.stop_span('operation')
|
104
|
+
expect(subject.spans).to match('operation' => be > 0)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
context "when multiple spans were captured" do
|
109
|
+
before do
|
110
|
+
subject.start_span('operation')
|
111
|
+
subject.stop_span('operation')
|
112
|
+
|
113
|
+
subject.start_span('another operation')
|
114
|
+
subject.stop_span('another operation')
|
115
|
+
end
|
116
|
+
|
117
|
+
it "returns a Hash with all spans" do
|
118
|
+
expect(subject.spans).to match(
|
119
|
+
'operation' => be > 0,
|
120
|
+
'another operation' => be > 0
|
121
|
+
)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
@@ -0,0 +1,238 @@
|
|
1
|
+
RSpec.describe Airbrake::Truncator do
|
2
|
+
def multiply_by_2_max_len(chr)
|
3
|
+
chr * 2 * max_len
|
4
|
+
end
|
5
|
+
|
6
|
+
describe "#truncate" do
|
7
|
+
let(:max_size) { 3 }
|
8
|
+
let(:truncated) { '[Truncated]' }
|
9
|
+
let(:max_len) { max_size + truncated.length }
|
10
|
+
|
11
|
+
subject { described_class.new(max_size).truncate(object) }
|
12
|
+
|
13
|
+
context "given a frozen string" do
|
14
|
+
let(:object) { multiply_by_2_max_len('a') }
|
15
|
+
|
16
|
+
it "returns a new truncated frozen string" do
|
17
|
+
expect(subject.length).to eq(max_len)
|
18
|
+
expect(subject).to be_frozen
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "given a frozen hash of strings" do
|
23
|
+
let(:object) do
|
24
|
+
{
|
25
|
+
banana: multiply_by_2_max_len('a'),
|
26
|
+
kiwi: multiply_by_2_max_len('b'),
|
27
|
+
strawberry: 'c',
|
28
|
+
shrimp: 'd'
|
29
|
+
}.freeze
|
30
|
+
end
|
31
|
+
|
32
|
+
it "returns a new truncated frozen hash" do
|
33
|
+
expect(subject.size).to eq(max_size)
|
34
|
+
expect(subject).to be_frozen
|
35
|
+
|
36
|
+
expect(subject).to eq(
|
37
|
+
banana: 'aaa[Truncated]', kiwi: 'bbb[Truncated]', strawberry: 'c'
|
38
|
+
)
|
39
|
+
expect(subject[:banana]).to be_frozen
|
40
|
+
expect(subject[:kiwi]).to be_frozen
|
41
|
+
expect(subject[:strawberry]).not_to be_frozen
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context "given a frozen array of strings" do
|
46
|
+
let(:object) do
|
47
|
+
[
|
48
|
+
multiply_by_2_max_len('a'),
|
49
|
+
'b',
|
50
|
+
multiply_by_2_max_len('c'),
|
51
|
+
'd'
|
52
|
+
].freeze
|
53
|
+
end
|
54
|
+
|
55
|
+
it "returns a new truncated frozen array" do
|
56
|
+
expect(subject.size).to eq(max_size)
|
57
|
+
expect(subject).to be_frozen
|
58
|
+
|
59
|
+
expect(subject).to eq(['aaa[Truncated]', 'b', 'ccc[Truncated]'])
|
60
|
+
expect(subject[0]).to be_frozen
|
61
|
+
expect(subject[1]).not_to be_frozen
|
62
|
+
expect(subject[2]).to be_frozen
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context "given a frozen set of strings" do
|
67
|
+
let(:object) do
|
68
|
+
Set.new([
|
69
|
+
multiply_by_2_max_len('a'),
|
70
|
+
'b',
|
71
|
+
multiply_by_2_max_len('c'),
|
72
|
+
'd'
|
73
|
+
]).freeze
|
74
|
+
end
|
75
|
+
|
76
|
+
it "returns a new truncated frozen array" do
|
77
|
+
expect(subject.size).to eq(max_size)
|
78
|
+
expect(subject).to be_frozen
|
79
|
+
|
80
|
+
expect(subject).to eq(
|
81
|
+
Set.new(['aaa[Truncated]', 'b', 'ccc[Truncated]'])
|
82
|
+
)
|
83
|
+
expect(subject).to be_frozen
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
context "given an arbitrary frozen object that responds to #to_json" do
|
88
|
+
let(:object) do
|
89
|
+
obj = Object.new
|
90
|
+
def obj.to_json
|
91
|
+
'{"object":"shrimp"}'
|
92
|
+
end
|
93
|
+
obj.freeze
|
94
|
+
end
|
95
|
+
|
96
|
+
it "converts the object to truncated JSON" do
|
97
|
+
expect(subject.length).to eq(max_len)
|
98
|
+
expect(subject).to be_frozen
|
99
|
+
|
100
|
+
expect(subject).to eq('{"o[Truncated]')
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
context "given an arbitrary object that doesn't respond to #to_json" do
|
105
|
+
let(:object) do
|
106
|
+
obj = Object.new
|
107
|
+
allow(obj).to receive(:to_json)
|
108
|
+
.and_raise(Airbrake::Notice::JSON_EXCEPTIONS.first)
|
109
|
+
obj
|
110
|
+
end
|
111
|
+
|
112
|
+
it "converts the object to a truncated string" do
|
113
|
+
expect(subject.length).to eq(max_len)
|
114
|
+
expect(subject).to eq('#<O[Truncated]')
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
shared_examples 'self returning objects' do |object|
|
119
|
+
it "returns the passed object" do
|
120
|
+
expect(described_class.new(max_size).truncate(object)).to eql(object)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
[1, true, false, :symbol, nil].each do |object|
|
125
|
+
include_examples 'self returning objects', object
|
126
|
+
end
|
127
|
+
|
128
|
+
context "given a recursive array" do
|
129
|
+
let(:object) do
|
130
|
+
a = %w[aaaaa bb]
|
131
|
+
a << a
|
132
|
+
a << 'c'
|
133
|
+
a
|
134
|
+
end
|
135
|
+
|
136
|
+
it "prevents recursion" do
|
137
|
+
expect(subject).to eq(['aaa[Truncated]', 'bb', '[Circular]'])
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
context "given a recursive array with recursive hashes" do
|
142
|
+
let(:object) do
|
143
|
+
a = []
|
144
|
+
a << a
|
145
|
+
|
146
|
+
h = {}
|
147
|
+
h[:k] = h
|
148
|
+
a << h << 'aaaa'
|
149
|
+
end
|
150
|
+
|
151
|
+
it "prevents recursion" do
|
152
|
+
expect(subject).to eq(['[Circular]', { k: '[Circular]' }, 'aaa[Truncated]'])
|
153
|
+
expect(subject).to be_frozen
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
context "given a recursive set with recursive arrays" do
|
158
|
+
let(:object) do
|
159
|
+
s = Set.new
|
160
|
+
s << s
|
161
|
+
|
162
|
+
h = {}
|
163
|
+
h[:k] = h
|
164
|
+
s << h << 'aaaa'
|
165
|
+
end
|
166
|
+
|
167
|
+
it "prevents recursion" do
|
168
|
+
expect(subject).to eq(
|
169
|
+
Set.new(['[Circular]', { k: '[Circular]' }, 'aaa[Truncated]'])
|
170
|
+
)
|
171
|
+
expect(subject).to be_frozen
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
context "given a hash with long strings" do
|
176
|
+
let(:object) do
|
177
|
+
{
|
178
|
+
a: multiply_by_2_max_len('a'),
|
179
|
+
b: multiply_by_2_max_len('b'),
|
180
|
+
c: { d: multiply_by_2_max_len('d'), e: 'e' }
|
181
|
+
}
|
182
|
+
end
|
183
|
+
|
184
|
+
it "truncates the long strings" do
|
185
|
+
expect(subject).to eq(
|
186
|
+
a: 'aaa[Truncated]', b: 'bbb[Truncated]', c: { d: 'ddd[Truncated]', e: 'e' }
|
187
|
+
)
|
188
|
+
expect(subject).to be_frozen
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
context "given a string with valid unicode characters" do
|
193
|
+
let(:object) { "€€€€€" }
|
194
|
+
|
195
|
+
it "truncates the string" do
|
196
|
+
expect(subject).to eq("€€€[Truncated]")
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
context "given an ASCII-8BIT string with invalid characters" do
|
201
|
+
let(:object) do
|
202
|
+
# Shenanigans to get a bad ASCII-8BIT string. Direct conversion raises error.
|
203
|
+
encoded = Base64.encode64("\xD3\xE6\xBC\x9D\xBA").encode!('ASCII-8BIT')
|
204
|
+
Base64.decode64(encoded).freeze
|
205
|
+
end
|
206
|
+
|
207
|
+
it "converts and truncates the string to UTF-8" do
|
208
|
+
expect(subject).to eq("���[Truncated]")
|
209
|
+
expect(subject).to be_frozen
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
context "given an array with hashes and hash-like objects with identical keys" do
|
214
|
+
let(:hashie) { Class.new(Hash) }
|
215
|
+
|
216
|
+
let(:object) do
|
217
|
+
{
|
218
|
+
errors: [
|
219
|
+
{ file: 'a' },
|
220
|
+
{ file: 'a' },
|
221
|
+
hashie.new.merge(file: 'bcde')
|
222
|
+
]
|
223
|
+
}
|
224
|
+
end
|
225
|
+
|
226
|
+
it "truncates values" do
|
227
|
+
expect(subject).to eq(
|
228
|
+
errors: [
|
229
|
+
{ file: 'a' },
|
230
|
+
{ file: 'a' },
|
231
|
+
hashie.new.merge(file: 'bcd[Truncated]')
|
232
|
+
]
|
233
|
+
)
|
234
|
+
expect(subject).to be_frozen
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
238
|
+
end
|
metadata
ADDED
@@ -0,0 +1,216 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: airbrake-ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 4.7.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Airbrake Technologies, Inc.
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-10-03 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rbtree3
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.5'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.5'
|
27
|
+
description: |
|
28
|
+
Airbrake Ruby is a plain Ruby notifier for Airbrake (https://airbrake.io), the
|
29
|
+
leading exception reporting service. Airbrake Ruby provides minimalist API that
|
30
|
+
enables the ability to send any Ruby exception to the Airbrake dashboard. The
|
31
|
+
library is extremely lightweight and it perfectly suits plain Ruby applications.
|
32
|
+
For apps that are built with Rails, Sinatra or any other Rack-compliant web
|
33
|
+
framework we offer the airbrake gem (https://github.com/airbrake/airbrake). It
|
34
|
+
has additional features such as reporting of any unhandled exceptions
|
35
|
+
automatically, integrations with Resque, Sidekiq, Delayed Job and many more.
|
36
|
+
email: support@airbrake.io
|
37
|
+
executables: []
|
38
|
+
extensions: []
|
39
|
+
extra_rdoc_files: []
|
40
|
+
files:
|
41
|
+
- lib/airbrake-ruby.rb
|
42
|
+
- lib/airbrake-ruby/async_sender.rb
|
43
|
+
- lib/airbrake-ruby/backtrace.rb
|
44
|
+
- lib/airbrake-ruby/benchmark.rb
|
45
|
+
- lib/airbrake-ruby/code_hunk.rb
|
46
|
+
- lib/airbrake-ruby/config.rb
|
47
|
+
- lib/airbrake-ruby/config/validator.rb
|
48
|
+
- lib/airbrake-ruby/deploy_notifier.rb
|
49
|
+
- lib/airbrake-ruby/file_cache.rb
|
50
|
+
- lib/airbrake-ruby/filter_chain.rb
|
51
|
+
- lib/airbrake-ruby/filters/context_filter.rb
|
52
|
+
- lib/airbrake-ruby/filters/dependency_filter.rb
|
53
|
+
- lib/airbrake-ruby/filters/exception_attributes_filter.rb
|
54
|
+
- lib/airbrake-ruby/filters/gem_root_filter.rb
|
55
|
+
- lib/airbrake-ruby/filters/git_last_checkout_filter.rb
|
56
|
+
- lib/airbrake-ruby/filters/git_repository_filter.rb
|
57
|
+
- lib/airbrake-ruby/filters/git_revision_filter.rb
|
58
|
+
- lib/airbrake-ruby/filters/keys_blacklist.rb
|
59
|
+
- lib/airbrake-ruby/filters/keys_filter.rb
|
60
|
+
- lib/airbrake-ruby/filters/keys_whitelist.rb
|
61
|
+
- lib/airbrake-ruby/filters/root_directory_filter.rb
|
62
|
+
- lib/airbrake-ruby/filters/sql_filter.rb
|
63
|
+
- lib/airbrake-ruby/filters/system_exit_filter.rb
|
64
|
+
- lib/airbrake-ruby/filters/thread_filter.rb
|
65
|
+
- lib/airbrake-ruby/hash_keyable.rb
|
66
|
+
- lib/airbrake-ruby/ignorable.rb
|
67
|
+
- lib/airbrake-ruby/inspectable.rb
|
68
|
+
- lib/airbrake-ruby/loggable.rb
|
69
|
+
- lib/airbrake-ruby/monotonic_time.rb
|
70
|
+
- lib/airbrake-ruby/nested_exception.rb
|
71
|
+
- lib/airbrake-ruby/notice.rb
|
72
|
+
- lib/airbrake-ruby/notice_notifier.rb
|
73
|
+
- lib/airbrake-ruby/performance_breakdown.rb
|
74
|
+
- lib/airbrake-ruby/performance_notifier.rb
|
75
|
+
- lib/airbrake-ruby/promise.rb
|
76
|
+
- lib/airbrake-ruby/query.rb
|
77
|
+
- lib/airbrake-ruby/request.rb
|
78
|
+
- lib/airbrake-ruby/response.rb
|
79
|
+
- lib/airbrake-ruby/stashable.rb
|
80
|
+
- lib/airbrake-ruby/stat.rb
|
81
|
+
- lib/airbrake-ruby/sync_sender.rb
|
82
|
+
- lib/airbrake-ruby/tdigest.rb
|
83
|
+
- lib/airbrake-ruby/thread_pool.rb
|
84
|
+
- lib/airbrake-ruby/time_truncate.rb
|
85
|
+
- lib/airbrake-ruby/timed_trace.rb
|
86
|
+
- lib/airbrake-ruby/truncator.rb
|
87
|
+
- lib/airbrake-ruby/version.rb
|
88
|
+
- spec/airbrake_spec.rb
|
89
|
+
- spec/async_sender_spec.rb
|
90
|
+
- spec/backtrace_spec.rb
|
91
|
+
- spec/benchmark_spec.rb
|
92
|
+
- spec/code_hunk_spec.rb
|
93
|
+
- spec/config/validator_spec.rb
|
94
|
+
- spec/config_spec.rb
|
95
|
+
- spec/deploy_notifier_spec.rb
|
96
|
+
- spec/file_cache_spec.rb
|
97
|
+
- spec/filter_chain_spec.rb
|
98
|
+
- spec/filters/context_filter_spec.rb
|
99
|
+
- spec/filters/dependency_filter_spec.rb
|
100
|
+
- spec/filters/exception_attributes_filter_spec.rb
|
101
|
+
- spec/filters/gem_root_filter_spec.rb
|
102
|
+
- spec/filters/git_last_checkout_filter_spec.rb
|
103
|
+
- spec/filters/git_repository_filter.rb
|
104
|
+
- spec/filters/git_revision_filter_spec.rb
|
105
|
+
- spec/filters/keys_blacklist_spec.rb
|
106
|
+
- spec/filters/keys_whitelist_spec.rb
|
107
|
+
- spec/filters/root_directory_filter_spec.rb
|
108
|
+
- spec/filters/sql_filter_spec.rb
|
109
|
+
- spec/filters/system_exit_filter_spec.rb
|
110
|
+
- spec/filters/thread_filter_spec.rb
|
111
|
+
- spec/fixtures/notroot.txt
|
112
|
+
- spec/fixtures/project_root/code.rb
|
113
|
+
- spec/fixtures/project_root/empty_file.rb
|
114
|
+
- spec/fixtures/project_root/long_line.txt
|
115
|
+
- spec/fixtures/project_root/short_file.rb
|
116
|
+
- spec/fixtures/project_root/vendor/bundle/ignored_file.rb
|
117
|
+
- spec/helpers.rb
|
118
|
+
- spec/ignorable_spec.rb
|
119
|
+
- spec/inspectable_spec.rb
|
120
|
+
- spec/monotonic_time_spec.rb
|
121
|
+
- spec/nested_exception_spec.rb
|
122
|
+
- spec/notice_notifier/options_spec.rb
|
123
|
+
- spec/notice_notifier_spec.rb
|
124
|
+
- spec/notice_spec.rb
|
125
|
+
- spec/performance_breakdown_spec.rb
|
126
|
+
- spec/performance_notifier_spec.rb
|
127
|
+
- spec/promise_spec.rb
|
128
|
+
- spec/query_spec.rb
|
129
|
+
- spec/request_spec.rb
|
130
|
+
- spec/response_spec.rb
|
131
|
+
- spec/spec_helper.rb
|
132
|
+
- spec/stashable_spec.rb
|
133
|
+
- spec/stat_spec.rb
|
134
|
+
- spec/sync_sender_spec.rb
|
135
|
+
- spec/tdigest_spec.rb
|
136
|
+
- spec/thread_pool_spec.rb
|
137
|
+
- spec/time_truncate_spec.rb
|
138
|
+
- spec/timed_trace_spec.rb
|
139
|
+
- spec/truncator_spec.rb
|
140
|
+
homepage: https://airbrake.io
|
141
|
+
licenses:
|
142
|
+
- MIT
|
143
|
+
metadata: {}
|
144
|
+
post_install_message:
|
145
|
+
rdoc_options: []
|
146
|
+
require_paths:
|
147
|
+
- lib
|
148
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '2.1'
|
153
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
|
+
requirements:
|
155
|
+
- - ">="
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
requirements: []
|
159
|
+
rubyforge_project:
|
160
|
+
rubygems_version: 2.6.14.4
|
161
|
+
signing_key:
|
162
|
+
specification_version: 4
|
163
|
+
summary: Ruby notifier for https://airbrake.io
|
164
|
+
test_files:
|
165
|
+
- spec/truncator_spec.rb
|
166
|
+
- spec/benchmark_spec.rb
|
167
|
+
- spec/helpers.rb
|
168
|
+
- spec/filters/exception_attributes_filter_spec.rb
|
169
|
+
- spec/filters/root_directory_filter_spec.rb
|
170
|
+
- spec/filters/sql_filter_spec.rb
|
171
|
+
- spec/filters/keys_whitelist_spec.rb
|
172
|
+
- spec/filters/system_exit_filter_spec.rb
|
173
|
+
- spec/filters/thread_filter_spec.rb
|
174
|
+
- spec/filters/dependency_filter_spec.rb
|
175
|
+
- spec/filters/context_filter_spec.rb
|
176
|
+
- spec/filters/git_last_checkout_filter_spec.rb
|
177
|
+
- spec/filters/git_revision_filter_spec.rb
|
178
|
+
- spec/filters/keys_blacklist_spec.rb
|
179
|
+
- spec/filters/gem_root_filter_spec.rb
|
180
|
+
- spec/filters/git_repository_filter.rb
|
181
|
+
- spec/spec_helper.rb
|
182
|
+
- spec/notice_spec.rb
|
183
|
+
- spec/config_spec.rb
|
184
|
+
- spec/performance_breakdown_spec.rb
|
185
|
+
- spec/tdigest_spec.rb
|
186
|
+
- spec/async_sender_spec.rb
|
187
|
+
- spec/stat_spec.rb
|
188
|
+
- spec/backtrace_spec.rb
|
189
|
+
- spec/notice_notifier_spec.rb
|
190
|
+
- spec/time_truncate_spec.rb
|
191
|
+
- spec/promise_spec.rb
|
192
|
+
- spec/thread_pool_spec.rb
|
193
|
+
- spec/config/validator_spec.rb
|
194
|
+
- spec/sync_sender_spec.rb
|
195
|
+
- spec/ignorable_spec.rb
|
196
|
+
- spec/deploy_notifier_spec.rb
|
197
|
+
- spec/performance_notifier_spec.rb
|
198
|
+
- spec/airbrake_spec.rb
|
199
|
+
- spec/nested_exception_spec.rb
|
200
|
+
- spec/timed_trace_spec.rb
|
201
|
+
- spec/file_cache_spec.rb
|
202
|
+
- spec/request_spec.rb
|
203
|
+
- spec/notice_notifier/options_spec.rb
|
204
|
+
- spec/filter_chain_spec.rb
|
205
|
+
- spec/response_spec.rb
|
206
|
+
- spec/code_hunk_spec.rb
|
207
|
+
- spec/fixtures/notroot.txt
|
208
|
+
- spec/fixtures/project_root/long_line.txt
|
209
|
+
- spec/fixtures/project_root/empty_file.rb
|
210
|
+
- spec/fixtures/project_root/code.rb
|
211
|
+
- spec/fixtures/project_root/short_file.rb
|
212
|
+
- spec/fixtures/project_root/vendor/bundle/ignored_file.rb
|
213
|
+
- spec/monotonic_time_spec.rb
|
214
|
+
- spec/inspectable_spec.rb
|
215
|
+
- spec/stashable_spec.rb
|
216
|
+
- spec/query_spec.rb
|