airbrake-ruby 4.3.0 → 4.4.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 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