sentry-ruby 5.3.0 → 5.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +11 -0
  3. data/.rspec +2 -0
  4. data/.yardopts +2 -0
  5. data/CHANGELOG.md +313 -0
  6. data/CODE_OF_CONDUCT.md +74 -0
  7. data/Gemfile +31 -0
  8. data/Makefile +4 -0
  9. data/README.md +10 -6
  10. data/Rakefile +13 -0
  11. data/bin/console +18 -0
  12. data/bin/setup +8 -0
  13. data/lib/sentry/background_worker.rb +72 -0
  14. data/lib/sentry/backtrace.rb +124 -0
  15. data/lib/sentry/baggage.rb +81 -0
  16. data/lib/sentry/breadcrumb/sentry_logger.rb +90 -0
  17. data/lib/sentry/breadcrumb.rb +70 -0
  18. data/lib/sentry/breadcrumb_buffer.rb +64 -0
  19. data/lib/sentry/client.rb +207 -0
  20. data/lib/sentry/configuration.rb +543 -0
  21. data/lib/sentry/core_ext/object/deep_dup.rb +61 -0
  22. data/lib/sentry/core_ext/object/duplicable.rb +155 -0
  23. data/lib/sentry/dsn.rb +53 -0
  24. data/lib/sentry/envelope.rb +96 -0
  25. data/lib/sentry/error_event.rb +38 -0
  26. data/lib/sentry/event.rb +178 -0
  27. data/lib/sentry/exceptions.rb +9 -0
  28. data/lib/sentry/hub.rb +241 -0
  29. data/lib/sentry/integrable.rb +26 -0
  30. data/lib/sentry/interface.rb +16 -0
  31. data/lib/sentry/interfaces/exception.rb +43 -0
  32. data/lib/sentry/interfaces/request.rb +134 -0
  33. data/lib/sentry/interfaces/single_exception.rb +65 -0
  34. data/lib/sentry/interfaces/stacktrace.rb +87 -0
  35. data/lib/sentry/interfaces/stacktrace_builder.rb +79 -0
  36. data/lib/sentry/interfaces/threads.rb +42 -0
  37. data/lib/sentry/linecache.rb +47 -0
  38. data/lib/sentry/logger.rb +20 -0
  39. data/lib/sentry/net/http.rb +103 -0
  40. data/lib/sentry/rack/capture_exceptions.rb +82 -0
  41. data/lib/sentry/rack.rb +5 -0
  42. data/lib/sentry/rake.rb +41 -0
  43. data/lib/sentry/redis.rb +107 -0
  44. data/lib/sentry/release_detector.rb +39 -0
  45. data/lib/sentry/scope.rb +339 -0
  46. data/lib/sentry/session.rb +33 -0
  47. data/lib/sentry/session_flusher.rb +90 -0
  48. data/lib/sentry/span.rb +236 -0
  49. data/lib/sentry/test_helper.rb +78 -0
  50. data/lib/sentry/transaction.rb +345 -0
  51. data/lib/sentry/transaction_event.rb +53 -0
  52. data/lib/sentry/transport/configuration.rb +25 -0
  53. data/lib/sentry/transport/dummy_transport.rb +21 -0
  54. data/lib/sentry/transport/http_transport.rb +175 -0
  55. data/lib/sentry/transport.rb +214 -0
  56. data/lib/sentry/utils/argument_checking_helper.rb +13 -0
  57. data/lib/sentry/utils/custom_inspection.rb +14 -0
  58. data/lib/sentry/utils/encoding_helper.rb +22 -0
  59. data/lib/sentry/utils/exception_cause_chain.rb +20 -0
  60. data/lib/sentry/utils/logging_helper.rb +26 -0
  61. data/lib/sentry/utils/real_ip.rb +84 -0
  62. data/lib/sentry/utils/request_id.rb +18 -0
  63. data/lib/sentry/version.rb +5 -0
  64. data/lib/sentry-ruby.rb +511 -0
  65. data/sentry-ruby-core.gemspec +23 -0
  66. data/sentry-ruby.gemspec +24 -0
  67. metadata +66 -16
@@ -0,0 +1,511 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "English"
4
+ require "forwardable"
5
+ require "time"
6
+
7
+ require "sentry/version"
8
+ require "sentry/exceptions"
9
+ require "sentry/core_ext/object/deep_dup"
10
+ require "sentry/utils/argument_checking_helper"
11
+ require "sentry/utils/encoding_helper"
12
+ require "sentry/utils/logging_helper"
13
+ require "sentry/configuration"
14
+ require "sentry/logger"
15
+ require "sentry/event"
16
+ require "sentry/error_event"
17
+ require "sentry/transaction_event"
18
+ require "sentry/span"
19
+ require "sentry/transaction"
20
+ require "sentry/hub"
21
+ require "sentry/background_worker"
22
+ require "sentry/session_flusher"
23
+
24
+ [
25
+ "sentry/rake",
26
+ "sentry/rack",
27
+ ].each do |lib|
28
+ begin
29
+ require lib
30
+ rescue LoadError
31
+ end
32
+ end
33
+
34
+ module Sentry
35
+ META = { "name" => "sentry.ruby", "version" => Sentry::VERSION }.freeze
36
+
37
+ CAPTURED_SIGNATURE = :@__sentry_captured
38
+
39
+ LOGGER_PROGNAME = "sentry".freeze
40
+
41
+ SENTRY_TRACE_HEADER_NAME = "sentry-trace".freeze
42
+
43
+ BAGGAGE_HEADER_NAME = "baggage".freeze
44
+
45
+ THREAD_LOCAL = :sentry_hub
46
+
47
+ class << self
48
+ # @!visibility private
49
+ def exception_locals_tp
50
+ @exception_locals_tp ||= TracePoint.new(:raise) do |tp|
51
+ exception = tp.raised_exception
52
+
53
+ # don't collect locals again if the exception is re-raised
54
+ next if exception.instance_variable_get(:@sentry_locals)
55
+ next unless tp.binding
56
+
57
+ locals = tp.binding.local_variables.each_with_object({}) do |local, result|
58
+ result[local] = tp.binding.local_variable_get(local)
59
+ end
60
+
61
+ exception.instance_variable_set(:@sentry_locals, locals)
62
+ end
63
+ end
64
+
65
+ # @!attribute [rw] background_worker
66
+ # @return [BackgroundWorker, nil]
67
+ attr_accessor :background_worker
68
+
69
+ # @!attribute [r] session_flusher
70
+ # @return [SessionFlusher, nil]
71
+ attr_reader :session_flusher
72
+
73
+ ##### Patch Registration #####
74
+
75
+ # @!visibility private
76
+ def register_patch(&block)
77
+ registered_patches << block
78
+ end
79
+
80
+ # @!visibility private
81
+ def apply_patches(config)
82
+ registered_patches.each do |patch|
83
+ patch.call(config)
84
+ end
85
+ end
86
+
87
+ # @!visibility private
88
+ def registered_patches
89
+ @registered_patches ||= []
90
+ end
91
+
92
+ ##### Integrations #####
93
+
94
+ # Returns a hash that contains all the integrations that have been registered to the main SDK.
95
+ #
96
+ # @return [Hash{String=>Hash}]
97
+ def integrations
98
+ @integrations ||= {}
99
+ end
100
+
101
+ # Registers the SDK integration with its name and version.
102
+ #
103
+ # @param name [String] name of the integration
104
+ # @param version [String] version of the integration
105
+ def register_integration(name, version)
106
+ if initialized?
107
+ logger.warn(LOGGER_PROGNAME) do
108
+ <<~MSG
109
+ Integration '#{name}' is loaded after the SDK is initialized, which can cause unexpected behavior. Please make sure all integrations are loaded before SDK initialization.
110
+ MSG
111
+ end
112
+ end
113
+
114
+ meta = { name: "sentry.ruby.#{name}", version: version }.freeze
115
+ integrations[name.to_s] = meta
116
+ end
117
+
118
+ ##### Method Delegation #####
119
+
120
+ extend Forwardable
121
+
122
+ # @!macro [new] configuration
123
+ # The Configuration object that's used for configuring the client and its transport.
124
+ # @return [Configuration]
125
+ # @!macro [new] send_event
126
+ # Sends the event to Sentry.
127
+ # @param event [Event] the event to be sent.
128
+ # @param hint [Hash] the hint data that'll be passed to `before_send` callback.
129
+ # @return [Event]
130
+
131
+ # @!method configuration
132
+ # @!macro configuration
133
+ def configuration
134
+ return unless initialized?
135
+ get_current_client.configuration
136
+ end
137
+
138
+ # @!method send_event
139
+ # @!macro send_event
140
+ def send_event(*args)
141
+ return unless initialized?
142
+ get_current_client.send_event(*args)
143
+ end
144
+
145
+ # @!macro [new] set_extras
146
+ # Updates the scope's extras attribute by merging with the old value.
147
+ # @param extras [Hash]
148
+ # @return [Hash]
149
+ # @!macro [new] set_user
150
+ # Sets the scope's user attribute.
151
+ # @param user [Hash]
152
+ # @return [Hash]
153
+ # @!macro [new] set_context
154
+ # Adds a new key-value pair to current contexts.
155
+ # @param key [String, Symbol]
156
+ # @param value [Object]
157
+ # @return [Hash]
158
+ # @!macro [new] set_tags
159
+ # Updates the scope's tags attribute by merging with the old value.
160
+ # @param tags [Hash]
161
+ # @return [Hash]
162
+
163
+ # @!method set_tags
164
+ # @!macro set_tags
165
+ def set_tags(*args)
166
+ return unless initialized?
167
+ get_current_scope.set_tags(*args)
168
+ end
169
+
170
+ # @!method set_extras
171
+ # @!macro set_extras
172
+ def set_extras(*args)
173
+ return unless initialized?
174
+ get_current_scope.set_extras(*args)
175
+ end
176
+
177
+ # @!method set_user
178
+ # @!macro set_user
179
+ def set_user(*args)
180
+ return unless initialized?
181
+ get_current_scope.set_user(*args)
182
+ end
183
+
184
+ # @!method set_context
185
+ # @!macro set_context
186
+ def set_context(*args)
187
+ return unless initialized?
188
+ get_current_scope.set_context(*args)
189
+ end
190
+
191
+ ##### Main APIs #####
192
+
193
+ # Initializes the SDK with given configuration.
194
+ #
195
+ # @yieldparam config [Configuration]
196
+ # @return [void]
197
+ def init(&block)
198
+ config = Configuration.new
199
+ yield(config) if block_given?
200
+ config.detect_release
201
+ apply_patches(config)
202
+ client = Client.new(config)
203
+ scope = Scope.new(max_breadcrumbs: config.max_breadcrumbs)
204
+ hub = Hub.new(client, scope)
205
+ Thread.current.thread_variable_set(THREAD_LOCAL, hub)
206
+ @main_hub = hub
207
+ @background_worker = Sentry::BackgroundWorker.new(config)
208
+
209
+ @session_flusher = if config.auto_session_tracking
210
+ Sentry::SessionFlusher.new(config, client)
211
+ else
212
+ nil
213
+ end
214
+
215
+ if config.include_local_variables
216
+ exception_locals_tp.enable
217
+ end
218
+
219
+ at_exit { close }
220
+ end
221
+
222
+ # Flushes pending events and cleans up SDK state.
223
+ # SDK will stop sending events and all top-level APIs will be no-ops after this.
224
+ #
225
+ # @return [void]
226
+ def close
227
+ if @background_worker
228
+ @background_worker.shutdown
229
+ @background_worker = nil
230
+ end
231
+
232
+ if @session_flusher
233
+ @session_flusher.kill
234
+ @session_flusher = nil
235
+ end
236
+
237
+ if configuration&.include_local_variables
238
+ exception_locals_tp.disable
239
+ end
240
+
241
+ @main_hub = nil
242
+ Thread.current.thread_variable_set(THREAD_LOCAL, nil)
243
+ end
244
+
245
+ # Returns true if the SDK is initialized.
246
+ #
247
+ # @return [Boolean]
248
+ def initialized?
249
+ !!get_main_hub
250
+ end
251
+
252
+ # Returns an uri for security policy reporting that's generated from the given DSN
253
+ # (To learn more about security policy reporting: https://docs.sentry.io/product/security-policy-reporting/)
254
+ #
255
+ # It returns nil if
256
+ # - The SDK is not initialized yet.
257
+ # - The DSN is not provided or is invalid.
258
+ #
259
+ # @return [String, nil]
260
+ def csp_report_uri
261
+ return unless initialized?
262
+ configuration.csp_report_uri
263
+ end
264
+
265
+ # Returns the main thread's active hub.
266
+ #
267
+ # @return [Hub]
268
+ def get_main_hub
269
+ @main_hub
270
+ end
271
+
272
+ # Takes an instance of Sentry::Breadcrumb and stores it to the current active scope.
273
+ #
274
+ # @return [Breadcrumb, nil]
275
+ def add_breadcrumb(breadcrumb, **options)
276
+ return unless initialized?
277
+ get_current_hub.add_breadcrumb(breadcrumb, **options)
278
+ end
279
+
280
+ # Returns the current active hub.
281
+ # If the current thread doesn't have an active hub, it will clone the main thread's active hub,
282
+ # stores it in the current thread, and then returns it.
283
+ #
284
+ # @return [Hub]
285
+ def get_current_hub
286
+ # we need to assign a hub to the current thread if it doesn't have one yet
287
+ #
288
+ # ideally, we should do this proactively whenever a new thread is created
289
+ # but it's impossible for the SDK to keep track every new thread
290
+ # so we need to use this rather passive way to make sure the app doesn't crash
291
+ Thread.current.thread_variable_get(THREAD_LOCAL) || clone_hub_to_current_thread
292
+ end
293
+
294
+ # Returns the current active client.
295
+ # @return [Client, nil]
296
+ def get_current_client
297
+ return unless initialized?
298
+ get_current_hub.current_client
299
+ end
300
+
301
+ # Returns the current active scope.
302
+ #
303
+ # @return [Scope, nil]
304
+ def get_current_scope
305
+ return unless initialized?
306
+ get_current_hub.current_scope
307
+ end
308
+
309
+ # Clones the main thread's active hub and stores it to the current thread.
310
+ #
311
+ # @return [void]
312
+ def clone_hub_to_current_thread
313
+ return unless initialized?
314
+ Thread.current.thread_variable_set(THREAD_LOCAL, get_main_hub.clone)
315
+ end
316
+
317
+ # Takes a block and yields the current active scope.
318
+ #
319
+ # @example
320
+ # Sentry.configure_scope do |scope|
321
+ # scope.set_tags(foo: "bar")
322
+ # end
323
+ #
324
+ # Sentry.capture_message("test message") # this event will have tags { foo: "bar" }
325
+ #
326
+ # @yieldparam scope [Scope]
327
+ # @return [void]
328
+ def configure_scope(&block)
329
+ return unless initialized?
330
+ get_current_hub.configure_scope(&block)
331
+ end
332
+
333
+ # Takes a block and yields a temporary scope.
334
+ # The temporary scope will inherit all the attributes from the current active scope and replace it to be the active
335
+ # scope inside the block.
336
+ #
337
+ # @example
338
+ # Sentry.configure_scope do |scope|
339
+ # scope.set_tags(foo: "bar")
340
+ # end
341
+ #
342
+ # Sentry.capture_message("test message") # this event will have tags { foo: "bar" }
343
+ #
344
+ # Sentry.with_scope do |temp_scope|
345
+ # temp_scope.set_tags(foo: "baz")
346
+ # Sentry.capture_message("test message 2") # this event will have tags { foo: "baz" }
347
+ # end
348
+ #
349
+ # Sentry.capture_message("test message 3") # this event will have tags { foo: "bar" }
350
+ #
351
+ # @yieldparam scope [Scope]
352
+ # @return [void]
353
+ def with_scope(&block)
354
+ return yield unless initialized?
355
+ get_current_hub.with_scope(&block)
356
+ end
357
+
358
+ # Wrap a given block with session tracking.
359
+ # Aggregate sessions in minutely buckets will be recorded
360
+ # around this block and flushed every minute.
361
+ #
362
+ # @example
363
+ # Sentry.with_session_tracking do
364
+ # a = 1 + 1 # new session recorded with :exited status
365
+ # end
366
+ #
367
+ # Sentry.with_session_tracking do
368
+ # 1 / 0
369
+ # rescue => e
370
+ # Sentry.capture_exception(e) # new session recorded with :errored status
371
+ # end
372
+ # @return [void]
373
+ def with_session_tracking(&block)
374
+ return yield unless initialized?
375
+ get_current_hub.with_session_tracking(&block)
376
+ end
377
+
378
+ # Takes an exception and reports it to Sentry via the currently active hub.
379
+ #
380
+ # @yieldparam scope [Scope]
381
+ # @return [Event, nil]
382
+ def capture_exception(exception, **options, &block)
383
+ return unless initialized?
384
+ get_current_hub.capture_exception(exception, **options, &block)
385
+ end
386
+
387
+ # Takes a block and evaluates it. If the block raised an exception, it reports the exception to Sentry and re-raises it.
388
+ # If the block ran without exception, it returns the evaluation result.
389
+ #
390
+ # @example
391
+ # Sentry.with_exception_captured do
392
+ # 1/1 #=> 1 will be returned
393
+ # end
394
+ #
395
+ # Sentry.with_exception_captured do
396
+ # 1/0 #=> ZeroDivisionError will be reported and re-raised
397
+ # end
398
+ #
399
+ def with_exception_captured(**options, &block)
400
+ yield
401
+ rescue Exception => e
402
+ capture_exception(e, **options)
403
+ raise
404
+ end
405
+
406
+ # Takes a message string and reports it to Sentry via the currently active hub.
407
+ #
408
+ # @yieldparam scope [Scope]
409
+ # @return [Event, nil]
410
+ def capture_message(message, **options, &block)
411
+ return unless initialized?
412
+ get_current_hub.capture_message(message, **options, &block)
413
+ end
414
+
415
+ # Takes an instance of Sentry::Event and dispatches it to the currently active hub.
416
+ #
417
+ # @return [Event, nil]
418
+ def capture_event(event)
419
+ return unless initialized?
420
+ get_current_hub.capture_event(event)
421
+ end
422
+
423
+ # Takes or initializes a new Sentry::Transaction and makes a sampling decision for it.
424
+ #
425
+ # @return [Transaction, nil]
426
+ def start_transaction(**options)
427
+ return unless initialized?
428
+ get_current_hub.start_transaction(**options)
429
+ end
430
+
431
+ # Records the block's execution as a child of the current span.
432
+ # If the current scope doesn't have a span, the block would still be executed but the yield param will be nil.
433
+ # @param attributes [Hash] attributes for the child span.
434
+ # @yieldparam child_span [Span, nil]
435
+ # @return yield result
436
+ #
437
+ # @example
438
+ # Sentry.with_child_span(op: "my operation") do |child_span|
439
+ # child_span.set_data(operation_data)
440
+ # child_span.set_description(operation_detail)
441
+ # # result will be returned
442
+ # end
443
+ #
444
+ def with_child_span(**attributes, &block)
445
+ return yield(nil) unless Sentry.initialized?
446
+ get_current_hub.with_child_span(**attributes, &block)
447
+ end
448
+
449
+ # Returns the id of the lastly reported Sentry::Event.
450
+ #
451
+ # @return [String, nil]
452
+ def last_event_id
453
+ return unless initialized?
454
+ get_current_hub.last_event_id
455
+ end
456
+
457
+ # Checks if the exception object has been captured by the SDK.
458
+ #
459
+ # @return [Boolean]
460
+ def exception_captured?(exc)
461
+ return false unless initialized?
462
+ !!exc.instance_variable_get(CAPTURED_SIGNATURE)
463
+ end
464
+
465
+ # Add a global event processor [Proc].
466
+ # These run before scope event processors.
467
+ #
468
+ # @yieldparam event [Event]
469
+ # @yieldparam hint [Hash, nil]
470
+ # @return [void]
471
+ #
472
+ # @example
473
+ # Sentry.add_global_event_processor do |event, hint|
474
+ # event.tags = { foo: 42 }
475
+ # event
476
+ # end
477
+ #
478
+ def add_global_event_processor(&block)
479
+ Scope.add_global_event_processor(&block)
480
+ end
481
+
482
+ ##### Helpers #####
483
+
484
+ # @!visibility private
485
+ def sys_command(command)
486
+ result = `#{command} 2>&1` rescue nil
487
+ return if result.nil? || result.empty? || ($CHILD_STATUS && $CHILD_STATUS.exitstatus != 0)
488
+
489
+ result.strip
490
+ end
491
+
492
+ # @!visibility private
493
+ def logger
494
+ configuration.logger
495
+ end
496
+
497
+ # @!visibility private
498
+ def sdk_meta
499
+ META
500
+ end
501
+
502
+ # @!visibility private
503
+ def utc_now
504
+ Time.now.utc
505
+ end
506
+ end
507
+ end
508
+
509
+ # patches
510
+ require "sentry/net/http"
511
+ require "sentry/redis"
@@ -0,0 +1,23 @@
1
+ require_relative "lib/sentry/version"
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = "sentry-ruby-core"
5
+ spec.version = Sentry::VERSION
6
+ spec.authors = ["Sentry Team"]
7
+ spec.description = spec.summary = "A gem that provides a client interface for the Sentry error logger"
8
+ spec.email = "accounts@sentry.io"
9
+ spec.license = 'MIT'
10
+ spec.homepage = "https://github.com/getsentry/sentry-ruby"
11
+
12
+ spec.platform = Gem::Platform::RUBY
13
+ spec.required_ruby_version = '>= 2.4'
14
+ spec.extra_rdoc_files = ["README.md", "LICENSE.txt"]
15
+ spec.files = `git ls-files | grep -Ev '^(spec|benchmarks|examples)'`.split("\n")
16
+
17
+ spec.metadata["homepage_uri"] = spec.homepage
18
+ spec.metadata["source_code_uri"] = spec.homepage
19
+ spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/master/CHANGELOG.md"
20
+
21
+ spec.add_dependency "sentry-ruby", Sentry::VERSION
22
+ spec.add_dependency "concurrent-ruby"
23
+ end
@@ -0,0 +1,24 @@
1
+ require_relative "lib/sentry/version"
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = "sentry-ruby"
5
+ spec.version = Sentry::VERSION
6
+ spec.authors = ["Sentry Team"]
7
+ spec.description = spec.summary = "A gem that provides a client interface for the Sentry error logger"
8
+ spec.email = "accounts@sentry.io"
9
+ spec.license = 'MIT'
10
+ spec.homepage = "https://github.com/getsentry/sentry-ruby"
11
+
12
+ spec.platform = Gem::Platform::RUBY
13
+ spec.required_ruby_version = '>= 2.4'
14
+ spec.extra_rdoc_files = ["README.md", "LICENSE.txt"]
15
+ spec.files = `git ls-files | grep -Ev '^(spec|benchmarks|examples)'`.split("\n")
16
+
17
+ spec.metadata["homepage_uri"] = spec.homepage
18
+ spec.metadata["source_code_uri"] = spec.homepage
19
+ spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/master/CHANGELOG.md"
20
+
21
+ spec.require_paths = ["lib"]
22
+
23
+ spec.add_dependency "concurrent-ruby", '~> 1.0', '>= 1.0.2'
24
+ end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sentry-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.3.0
4
+ version: 5.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sentry Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-27 00:00:00.000000000 Z
11
+ date: 2023-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: sentry-ruby-core
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - '='
18
- - !ruby/object:Gem::Version
19
- version: 5.3.0
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - '='
25
- - !ruby/object:Gem::Version
26
- version: 5.3.0
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: concurrent-ruby
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -52,8 +38,72 @@ extra_rdoc_files:
52
38
  - README.md
53
39
  - LICENSE.txt
54
40
  files:
41
+ - ".gitignore"
42
+ - ".rspec"
43
+ - ".yardopts"
44
+ - CHANGELOG.md
45
+ - CODE_OF_CONDUCT.md
46
+ - Gemfile
55
47
  - LICENSE.txt
48
+ - Makefile
56
49
  - README.md
50
+ - Rakefile
51
+ - bin/console
52
+ - bin/setup
53
+ - lib/sentry-ruby.rb
54
+ - lib/sentry/background_worker.rb
55
+ - lib/sentry/backtrace.rb
56
+ - lib/sentry/baggage.rb
57
+ - lib/sentry/breadcrumb.rb
58
+ - lib/sentry/breadcrumb/sentry_logger.rb
59
+ - lib/sentry/breadcrumb_buffer.rb
60
+ - lib/sentry/client.rb
61
+ - lib/sentry/configuration.rb
62
+ - lib/sentry/core_ext/object/deep_dup.rb
63
+ - lib/sentry/core_ext/object/duplicable.rb
64
+ - lib/sentry/dsn.rb
65
+ - lib/sentry/envelope.rb
66
+ - lib/sentry/error_event.rb
67
+ - lib/sentry/event.rb
68
+ - lib/sentry/exceptions.rb
69
+ - lib/sentry/hub.rb
70
+ - lib/sentry/integrable.rb
71
+ - lib/sentry/interface.rb
72
+ - lib/sentry/interfaces/exception.rb
73
+ - lib/sentry/interfaces/request.rb
74
+ - lib/sentry/interfaces/single_exception.rb
75
+ - lib/sentry/interfaces/stacktrace.rb
76
+ - lib/sentry/interfaces/stacktrace_builder.rb
77
+ - lib/sentry/interfaces/threads.rb
78
+ - lib/sentry/linecache.rb
79
+ - lib/sentry/logger.rb
80
+ - lib/sentry/net/http.rb
81
+ - lib/sentry/rack.rb
82
+ - lib/sentry/rack/capture_exceptions.rb
83
+ - lib/sentry/rake.rb
84
+ - lib/sentry/redis.rb
85
+ - lib/sentry/release_detector.rb
86
+ - lib/sentry/scope.rb
87
+ - lib/sentry/session.rb
88
+ - lib/sentry/session_flusher.rb
89
+ - lib/sentry/span.rb
90
+ - lib/sentry/test_helper.rb
91
+ - lib/sentry/transaction.rb
92
+ - lib/sentry/transaction_event.rb
93
+ - lib/sentry/transport.rb
94
+ - lib/sentry/transport/configuration.rb
95
+ - lib/sentry/transport/dummy_transport.rb
96
+ - lib/sentry/transport/http_transport.rb
97
+ - lib/sentry/utils/argument_checking_helper.rb
98
+ - lib/sentry/utils/custom_inspection.rb
99
+ - lib/sentry/utils/encoding_helper.rb
100
+ - lib/sentry/utils/exception_cause_chain.rb
101
+ - lib/sentry/utils/logging_helper.rb
102
+ - lib/sentry/utils/real_ip.rb
103
+ - lib/sentry/utils/request_id.rb
104
+ - lib/sentry/version.rb
105
+ - sentry-ruby-core.gemspec
106
+ - sentry-ruby.gemspec
57
107
  homepage: https://github.com/getsentry/sentry-ruby
58
108
  licenses:
59
109
  - MIT