airbrake-ruby 4.3.0 → 4.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6225e22d263a35ca8bc1e40a9b8d9a688738f37e
4
- data.tar.gz: d8d9046a0acee6834eb604769ed39d696c2c2325
3
+ metadata.gz: 0e642b4f41129e726c7f8107ca0d1eeb6880a701
4
+ data.tar.gz: 01f580af59e4108972b56ea5dd2cc9eb00e40140
5
5
  SHA512:
6
- metadata.gz: 35a1011b7fcf9380a20b934a04dccfaec4acd83a171060ff6457370e8da90fac83b6ba48d8d60e50b2ed0e21611aa5d0dda3cf210a5d7d6710115cdc0cfcfaeb
7
- data.tar.gz: '098415b654116fce90700b9e4f7d540637c98d5712b321eb808c20c386a3100a3e63ba68ab6d514029831e84dab9585e66dc17cafcf271c916dc81ab3ebf6089'
6
+ metadata.gz: 3fcf97fff4a036e3be64919f31b38c6e195ff71b9e108181026c9a18d11ce89ab32bd59b496563c967d861d89014e60e2d4d84c3d18f81627c916f3628b35c58
7
+ data.tar.gz: 17923e72b4a4938fff36c4feb68df58fea240a96d957c72866feae53b920c3dcfee5ba3fcf5c3a2354279ef309156c2d7879856035454eccca7e8b0109ff58fc
@@ -8,6 +8,7 @@ require 'time'
8
8
 
9
9
  require 'airbrake-ruby/version'
10
10
  require 'airbrake-ruby/loggable'
11
+ require 'airbrake-ruby/stashable'
11
12
  require 'airbrake-ruby/config'
12
13
  require 'airbrake-ruby/config/validator'
13
14
  require 'airbrake-ruby/promise'
@@ -346,11 +347,15 @@ module Airbrake
346
347
  # (optional)
347
348
  # @option request_info [Date] :start_time When the request started
348
349
  # @option request_info [Time] :end_time When the request ended (optional)
350
+ # @param [Hash] stash What needs to be appeneded to the stash, so it's
351
+ # available in filters
349
352
  # @return [void]
350
353
  # @since v3.0.0
351
354
  # @see Airbrake::PerformanceNotifier#notify
352
- def notify_request(request_info)
353
- performance_notifier.notify(Request.new(request_info))
355
+ def notify_request(request_info, stash = {})
356
+ request = Request.new(request_info)
357
+ request.stash.merge!(stash)
358
+ performance_notifier.notify(request)
354
359
  end
355
360
 
356
361
  # Increments SQL statistics of a certain +query+ that was invoked on
@@ -377,11 +382,15 @@ module Airbrake
377
382
  # @option request_info [String] :query The query that was executed
378
383
  # @option request_info [Date] :start_time When the query started executing
379
384
  # @option request_info [Time] :end_time When the query finished (optional)
385
+ # @param [Hash] stash What needs to be appeneded to the stash, so it's
386
+ # available in filters
380
387
  # @return [void]
381
388
  # @since v3.2.0
382
389
  # @see Airbrake::PerformanceNotifier#notify
383
- def notify_query(query_info)
384
- performance_notifier.notify(Query.new(query_info))
390
+ def notify_query(query_info, stash = {})
391
+ query = Query.new(query_info)
392
+ query.stash.merge!(stash)
393
+ performance_notifier.notify(query)
385
394
  end
386
395
 
387
396
  # Increments performance breakdown statistics of a certain route.
@@ -402,10 +411,14 @@ module Airbrake
402
411
  # @option breakdown_info [String] :response_type
403
412
  # @option breakdown_info [Array<Hash{Symbol=>Float}>] :groups
404
413
  # @option breakdown_info [Date] :start_time
414
+ # @param [Hash] stash What needs to be appeneded to the stash, so it's
415
+ # available in filters
405
416
  # @return [void]
406
417
  # @since v4.2.0
407
- def notify_performance_breakdown(breakdown_info)
408
- performance_notifier.notify(PerformanceBreakdown.new(breakdown_info))
418
+ def notify_performance_breakdown(breakdown_info, stash = {})
419
+ performance_breakdown = PerformanceBreakdown.new(breakdown_info)
420
+ performance_breakdown.stash.merge!(stash)
421
+ performance_notifier.notify(performance_breakdown)
409
422
  end
410
423
 
411
424
  # Runs a callback before {.notify_request} or {.notify_query} kicks in. This
@@ -51,11 +51,7 @@ module Airbrake
51
51
 
52
52
  include Ignorable
53
53
  include Loggable
54
-
55
- # @since v1.7.0
56
- # @return [Hash{Symbol=>Object}] the hash with arbitrary objects to be used
57
- # in filters
58
- attr_reader :stash
54
+ include Stashable
59
55
 
60
56
  # @api private
61
57
  def initialize(exception, params = {})
@@ -69,8 +65,9 @@ module Airbrake
69
65
  session: {},
70
66
  params: params
71
67
  }
72
- @stash = { exception: exception }
73
68
  @truncator = Airbrake::Truncator.new(PAYLOAD_MAX_SIZE)
69
+
70
+ stash[:exception] = exception
74
71
  end
75
72
 
76
73
  # Converts the notice to JSON. Calls +to_json+ on each object inside
@@ -11,6 +11,7 @@ module Airbrake
11
11
  ) do
12
12
  include HashKeyable
13
13
  include Ignorable
14
+ include Stashable
14
15
 
15
16
  def initialize(
16
17
  method:,
@@ -10,6 +10,7 @@ module Airbrake
10
10
  ) do
11
11
  include HashKeyable
12
12
  include Ignorable
13
+ include Stashable
13
14
 
14
15
  def initialize(
15
16
  method:,
@@ -8,6 +8,7 @@ module Airbrake
8
8
  Request = Struct.new(:method, :route, :status_code, :start_time, :end_time) do
9
9
  include HashKeyable
10
10
  include Ignorable
11
+ include Stashable
11
12
 
12
13
  def initialize(
13
14
  method:,
@@ -0,0 +1,15 @@
1
+ module Airbrake
2
+ # Stashable should be included in any class that wants the ability to stash
3
+ # arbitrary objects. It is mainly used by data objects that users can access
4
+ # through filters.
5
+ #
6
+ # @since v4.4.0
7
+ # @api private
8
+ module Stashable
9
+ # @return [Hash{Symbol=>Object}] the hash with arbitrary objects to be used
10
+ # in filters
11
+ def stash
12
+ @stash ||= {}
13
+ end
14
+ end
15
+ end
@@ -2,5 +2,5 @@
2
2
  # More information: http://semver.org/
3
3
  module Airbrake
4
4
  # @return [String] the library version
5
- AIRBRAKE_RUBY_VERSION = '4.3.0'.freeze
5
+ AIRBRAKE_RUBY_VERSION = '4.4.0'.freeze
6
6
  end
@@ -195,6 +195,114 @@ RSpec.describe Airbrake do
195
195
  end
196
196
  end
197
197
 
198
+ describe "#notify_request" do
199
+ context "when :stash key is not provided" do
200
+ it "doesn't add anything to the stash of the request" do
201
+ expect(described_class.performance_notifier).to receive(:notify) do |request|
202
+ expect(request.stash).to be_empty
203
+ end
204
+
205
+ described_class.notify_request(
206
+ method: 'GET',
207
+ route: '/',
208
+ status_code: 200,
209
+ start_time: Time.now
210
+ )
211
+ end
212
+ end
213
+
214
+ context "when :stash key is provided" do
215
+ it "adds the value as the stash of the request" do
216
+ expect(described_class.performance_notifier).to receive(:notify) do |request|
217
+ expect(request.stash).to eq(request_id: 1)
218
+ end
219
+
220
+ described_class.notify_request(
221
+ {
222
+ method: 'GET',
223
+ route: '/',
224
+ status_code: 200,
225
+ start_time: Time.now
226
+ },
227
+ request_id: 1
228
+ )
229
+ end
230
+ end
231
+ end
232
+
233
+ describe "#notify_query" do
234
+ context "when :stash key is not provided" do
235
+ it "doesn't add anything to the stash of the query" do
236
+ expect(described_class.performance_notifier).to receive(:notify) do |query|
237
+ expect(query.stash).to be_empty
238
+ end
239
+
240
+ described_class.notify_query(
241
+ method: 'GET',
242
+ route: '/',
243
+ query: '',
244
+ start_time: Time.now
245
+ )
246
+ end
247
+ end
248
+
249
+ context "when :stash key is provided" do
250
+ it "adds the value as the stash of the query" do
251
+ expect(described_class.performance_notifier).to receive(:notify) do |query|
252
+ expect(query.stash).to eq(request_id: 1)
253
+ end
254
+
255
+ described_class.notify_query(
256
+ {
257
+ method: 'GET',
258
+ route: '/',
259
+ query: '',
260
+ start_time: Time.now
261
+ },
262
+ request_id: 1
263
+ )
264
+ end
265
+ end
266
+ end
267
+
268
+ describe "#notify_performance_breakdown" do
269
+ context "when :stash key is not provided" do
270
+ it "doesn't add anything to the stash of the performance breakdown" do
271
+ expect(described_class.performance_notifier).to receive(:notify) do |query|
272
+ expect(query.stash).to be_empty
273
+ end
274
+
275
+ described_class.notify_query(
276
+ method: 'GET',
277
+ route: '/',
278
+ query: '',
279
+ start_time: Time.now
280
+ )
281
+ end
282
+ end
283
+
284
+ context "when :stash key is provided" do
285
+ it "adds the value as the stash of the performance breakdown" do
286
+ expect(
287
+ described_class.performance_notifier
288
+ ).to receive(:notify) do |performance_breakdown|
289
+ expect(performance_breakdown.stash).to eq(request_id: 1)
290
+ end
291
+
292
+ described_class.notify_performance_breakdown(
293
+ {
294
+ method: 'GET',
295
+ route: '/',
296
+ response_type: :html,
297
+ groups: {},
298
+ start_time: Time.now
299
+ },
300
+ request_id: 1
301
+ )
302
+ end
303
+ end
304
+ end
305
+
198
306
  describe ".performance_notifier" do
199
307
  it "returns a performance notifier" do
200
308
  expect(described_class.performance_notifier)
@@ -289,10 +289,8 @@ RSpec.describe Airbrake::Notice do
289
289
  end
290
290
 
291
291
  describe "#stash" do
292
- it "returns a hash" do
293
- obj = Object.new
294
- notice.stash[:bingo_object] = obj
295
- expect(notice.stash[:bingo_object]).to eql(obj)
296
- end
292
+ subject { described_class.new(AirbrakeTestError.new) }
293
+
294
+ it { is_expected.to respond_to(:stash) }
297
295
  end
298
296
  end
@@ -0,0 +1,12 @@
1
+ RSpec.describe Airbrake::PerformanceBreakdown do
2
+ describe "#stash" do
3
+ subject do
4
+ described_class.new(
5
+ method: 'GET', route: '/', response_type: '', groups: {},
6
+ start_time: Time.now
7
+ )
8
+ end
9
+
10
+ it { is_expected.to respond_to(:stash) }
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ RSpec.describe Airbrake::Query do
2
+ describe "#stash" do
3
+ subject do
4
+ described_class.new(
5
+ method: 'GET', route: '/', query: '', start_time: Time.now
6
+ )
7
+ end
8
+
9
+ it { is_expected.to respond_to(:stash) }
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ RSpec.describe Airbrake::Request do
2
+ describe "#stash" do
3
+ subject do
4
+ described_class.new(
5
+ method: 'GET', route: '/', status_code: 200, start_time: Time.now
6
+ )
7
+ end
8
+
9
+ it { is_expected.to respond_to(:stash) }
10
+ end
11
+ end
@@ -0,0 +1,23 @@
1
+ RSpec.describe Airbrake::Stashable do
2
+ let(:klass) do
3
+ mod = described_class
4
+ Class.new { include(mod) }
5
+ end
6
+
7
+ describe "#stash" do
8
+ subject { klass.new }
9
+
10
+ it "returns a hash" do
11
+ expect(subject.stash).to be_a(Hash)
12
+ end
13
+
14
+ it "returns an empty hash" do
15
+ expect(subject.stash).to be_empty
16
+ end
17
+
18
+ it "remembers what was put in the stash" do
19
+ subject.stash[:foo] = 1
20
+ expect(subject.stash[:foo]).to eq(1)
21
+ end
22
+ end
23
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: airbrake-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.3.0
4
+ version: 4.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Airbrake Technologies, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-30 00:00:00.000000000 Z
11
+ date: 2019-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rbtree3
@@ -76,6 +76,7 @@ files:
76
76
  - lib/airbrake-ruby/query.rb
77
77
  - lib/airbrake-ruby/request.rb
78
78
  - lib/airbrake-ruby/response.rb
79
+ - lib/airbrake-ruby/stashable.rb
79
80
  - lib/airbrake-ruby/stat.rb
80
81
  - lib/airbrake-ruby/sync_sender.rb
81
82
  - lib/airbrake-ruby/tdigest.rb
@@ -120,10 +121,14 @@ files:
120
121
  - spec/notice_notifier_spec.rb
121
122
  - spec/notice_notifier_spec/options_spec.rb
122
123
  - spec/notice_spec.rb
124
+ - spec/performance_breakdown_spec.rb
123
125
  - spec/performance_notifier_spec.rb
124
126
  - spec/promise_spec.rb
127
+ - spec/query_spec.rb
128
+ - spec/request_spec.rb
125
129
  - spec/response_spec.rb
126
130
  - spec/spec_helper.rb
131
+ - spec/stashable_spec.rb
127
132
  - spec/stat_spec.rb
128
133
  - spec/sync_sender_spec.rb
129
134
  - spec/tdigest_spec.rb
@@ -174,6 +179,7 @@ test_files:
174
179
  - spec/spec_helper.rb
175
180
  - spec/notice_spec.rb
176
181
  - spec/config_spec.rb
182
+ - spec/performance_breakdown_spec.rb
177
183
  - spec/tdigest_spec.rb
178
184
  - spec/async_sender_spec.rb
179
185
  - spec/stat_spec.rb
@@ -189,6 +195,7 @@ test_files:
189
195
  - spec/airbrake_spec.rb
190
196
  - spec/nested_exception_spec.rb
191
197
  - spec/timed_trace_spec.rb
198
+ - spec/request_spec.rb
192
199
  - spec/filter_chain_spec.rb
193
200
  - spec/response_spec.rb
194
201
  - spec/file_cache.rb
@@ -201,4 +208,6 @@ test_files:
201
208
  - spec/fixtures/project_root/vendor/bundle/ignored_file.rb
202
209
  - spec/monotonic_time_spec.rb
203
210
  - spec/inspectable_spec.rb
211
+ - spec/stashable_spec.rb
212
+ - spec/query_spec.rb
204
213
  - spec/notice_notifier_spec/options_spec.rb