appsignal 3.9.2 → 3.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +3135 -0
  3. data/.rubocop.yml +28 -20
  4. data/.rubocop_todo.yml +7 -33
  5. data/CHANGELOG.md +38 -0
  6. data/Rakefile +79 -64
  7. data/appsignal.gemspec +1 -1
  8. data/build_matrix.yml +109 -179
  9. data/ext/base.rb +1 -1
  10. data/gemfiles/hanami-2.1.gemfile +7 -0
  11. data/lib/appsignal/cli/diagnose.rb +1 -1
  12. data/lib/appsignal/config.rb +1 -1
  13. data/lib/appsignal/demo.rb +0 -1
  14. data/lib/appsignal/environment.rb +5 -1
  15. data/lib/appsignal/extension/jruby.rb +1 -1
  16. data/lib/appsignal/helpers/instrumentation.rb +1 -1
  17. data/lib/appsignal/integrations/grape.rb +19 -47
  18. data/lib/appsignal/integrations/hanami.rb +8 -7
  19. data/lib/appsignal/integrations/padrino.rb +46 -43
  20. data/lib/appsignal/integrations/railtie.rb +0 -3
  21. data/lib/appsignal/integrations/sinatra.rb +0 -1
  22. data/lib/appsignal/probes/gvl.rb +24 -2
  23. data/lib/appsignal/probes/sidekiq.rb +1 -1
  24. data/lib/appsignal/probes.rb +1 -1
  25. data/lib/appsignal/rack/abstract_middleware.rb +62 -28
  26. data/lib/appsignal/rack/event_handler.rb +12 -3
  27. data/lib/appsignal/rack/grape_middleware.rb +40 -0
  28. data/lib/appsignal/rack/hanami_middleware.rb +1 -11
  29. data/lib/appsignal/rack/rails_instrumentation.rb +14 -55
  30. data/lib/appsignal/utils/integration_memory_logger.rb +78 -0
  31. data/lib/appsignal/utils.rb +1 -0
  32. data/lib/appsignal/version.rb +1 -1
  33. data/lib/appsignal.rb +34 -33
  34. data/spec/.rubocop.yml +1 -1
  35. data/spec/lib/appsignal/cli/diagnose_spec.rb +1 -1
  36. data/spec/lib/appsignal/cli/install_spec.rb +3 -3
  37. data/spec/lib/appsignal/config_spec.rb +7 -5
  38. data/spec/lib/appsignal/demo_spec.rb +38 -41
  39. data/spec/lib/appsignal/hooks/action_cable_spec.rb +86 -167
  40. data/spec/lib/appsignal/hooks/active_support_notifications/finish_with_state_shared_examples.rb +8 -20
  41. data/spec/lib/appsignal/hooks/active_support_notifications/instrument_shared_examples.rb +38 -84
  42. data/spec/lib/appsignal/hooks/active_support_notifications/start_finish_shared_examples.rb +16 -37
  43. data/spec/lib/appsignal/hooks/active_support_notifications_spec.rb +4 -4
  44. data/spec/lib/appsignal/hooks/activejob_spec.rb +111 -200
  45. data/spec/lib/appsignal/hooks/delayed_job_spec.rb +54 -91
  46. data/spec/lib/appsignal/hooks/dry_monitor_spec.rb +14 -32
  47. data/spec/lib/appsignal/hooks/excon_spec.rb +8 -12
  48. data/spec/lib/appsignal/hooks/net_http_spec.rb +7 -42
  49. data/spec/lib/appsignal/hooks/rake_spec.rb +9 -19
  50. data/spec/lib/appsignal/hooks/redis_client_spec.rb +18 -30
  51. data/spec/lib/appsignal/hooks/redis_spec.rb +10 -16
  52. data/spec/lib/appsignal/hooks/resque_spec.rb +42 -62
  53. data/spec/lib/appsignal/hooks/shoryuken_spec.rb +33 -74
  54. data/spec/lib/appsignal/integrations/hanami_spec.rb +79 -21
  55. data/spec/lib/appsignal/integrations/http_spec.rb +12 -20
  56. data/spec/lib/appsignal/integrations/net_http_spec.rb +33 -0
  57. data/spec/lib/appsignal/integrations/object_spec.rb +29 -36
  58. data/spec/lib/appsignal/integrations/padrino_spec.rb +47 -70
  59. data/spec/lib/appsignal/integrations/que_spec.rb +43 -70
  60. data/spec/lib/appsignal/integrations/railtie_spec.rb +26 -67
  61. data/spec/lib/appsignal/integrations/sidekiq_spec.rb +86 -160
  62. data/spec/lib/appsignal/integrations/sinatra_spec.rb +0 -1
  63. data/spec/lib/appsignal/integrations/webmachine_spec.rb +28 -39
  64. data/spec/lib/appsignal/probes/gvl_spec.rb +80 -3
  65. data/spec/lib/appsignal/probes_spec.rb +7 -4
  66. data/spec/lib/appsignal/rack/abstract_middleware_spec.rb +215 -106
  67. data/spec/lib/appsignal/rack/event_handler_spec.rb +81 -78
  68. data/spec/lib/appsignal/rack/generic_instrumentation_spec.rb +2 -12
  69. data/spec/lib/appsignal/rack/grape_middleware_spec.rb +234 -0
  70. data/spec/lib/appsignal/rack/hanami_middleware_spec.rb +2 -16
  71. data/spec/lib/appsignal/rack/rails_instrumentation_spec.rb +67 -131
  72. data/spec/lib/appsignal/rack/sinatra_instrumentation_spec.rb +36 -44
  73. data/spec/lib/appsignal/rack/streaming_listener_spec.rb +68 -86
  74. data/spec/lib/appsignal/transaction_spec.rb +76 -90
  75. data/spec/lib/appsignal/utils/integration_memory_logger_spec.rb +163 -0
  76. data/spec/lib/appsignal_spec.rb +363 -342
  77. data/spec/support/helpers/dependency_helper.rb +6 -1
  78. data/spec/support/helpers/std_streams_helper.rb +1 -1
  79. data/spec/support/helpers/transaction_helpers.rb +8 -0
  80. data/spec/support/matchers/transaction.rb +185 -0
  81. data/spec/support/mocks/dummy_app.rb +20 -0
  82. data/spec/support/shared_examples/instrument.rb +17 -12
  83. data/spec/support/testing.rb +18 -9
  84. metadata +15 -10
  85. data/.semaphore/semaphore.yml +0 -2347
  86. data/script/lint_git +0 -22
  87. data/spec/lib/appsignal/integrations/grape_spec.rb +0 -239
  88. data/spec/support/matchers/be_completed.rb +0 -5
  89. /data/gemfiles/{hanami.gemfile → hanami-2.0.gemfile} +0 -0
@@ -1,4 +1,4 @@
1
- module DependencyHelper # rubocop:disable Metrics/ModuleLength
1
+ module DependencyHelper
2
2
  module_function
3
3
 
4
4
  def ruby_version
@@ -123,6 +123,11 @@ module DependencyHelper # rubocop:disable Metrics/ModuleLength
123
123
  dependency_present? "hanami"
124
124
  end
125
125
 
126
+ def hanami2_1_present?
127
+ hanami_present? &&
128
+ Gem::Version.new(::Hanami::VERSION) >= Gem::Version.new("2.1.0")
129
+ end
130
+
126
131
  def dry_monitor_present?
127
132
  dependency_present? "dry-monitor"
128
133
  end
@@ -89,6 +89,6 @@ module StdStreamsHelper
89
89
  end
90
90
  end
91
91
  reject
92
- end.join(",")
92
+ end.join
93
93
  end
94
94
  end
@@ -44,6 +44,14 @@ module TransactionHelpers
44
44
  created_transactions.last
45
45
  end
46
46
 
47
+ def current_transaction?
48
+ Appsignal::Transaction.current?
49
+ end
50
+
51
+ def current_transaction
52
+ Appsignal::Transaction.current
53
+ end
54
+
47
55
  # Set current transaction manually.
48
56
  # Cleared by {clear_current_transaction!}
49
57
  #
@@ -0,0 +1,185 @@
1
+ def define_transaction_metadata_matcher_for(matcher_key, value_key = matcher_key)
2
+ value_key = value_key.to_s
3
+
4
+ RSpec::Matchers.define "have_#{matcher_key}" do |expected_value|
5
+ match(:notify_expectation_failures => true) do |transaction|
6
+ actual_value = transaction.to_h[value_key]
7
+ if expected_value
8
+ expect(actual_value).to eq(expected_value)
9
+ else
10
+ expect(actual_value).to_not be_nil
11
+ end
12
+ end
13
+
14
+ match_when_negated(:notify_expectation_failures => true) do |transaction|
15
+ actual_value = transaction.to_h[value_key]
16
+ if expected_value
17
+ expect(actual_value).to_not eq(expected_value)
18
+ else
19
+ expect(actual_value).to be_nil
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ define_transaction_metadata_matcher_for(:id)
26
+ define_transaction_metadata_matcher_for(:namespace)
27
+ define_transaction_metadata_matcher_for(:action)
28
+
29
+ def define_transaction_sample_matcher_for(matcher_key, value_key = matcher_key)
30
+ value_key = value_key.to_s
31
+
32
+ RSpec::Matchers.define "include_#{matcher_key}" do |expected_value|
33
+ match(:notify_expectation_failures => true) do |transaction|
34
+ sample_data = transaction.to_h.dig("sample_data", value_key) || {}
35
+
36
+ if expected_value
37
+ expected_value = hash_including(expected_value) if expected_value.is_a?(Hash)
38
+ expect(sample_data).to match(expected_value)
39
+ else
40
+ expect(sample_data).to be_present
41
+ end
42
+ end
43
+
44
+ match_when_negated(:notify_expectation_failures => true) do |transaction|
45
+ sample_data = transaction.to_h.dig("sample_data", value_key) || {}
46
+
47
+ if expected_value
48
+ expect(sample_data).to_not include(expected_value)
49
+ else
50
+ expect(sample_data).to be_empty
51
+ end
52
+ end
53
+ end
54
+ end
55
+
56
+ define_transaction_sample_matcher_for(:sample_metadata, :metadata)
57
+ define_transaction_sample_matcher_for(:params)
58
+ define_transaction_sample_matcher_for(:environment)
59
+ define_transaction_sample_matcher_for(:session_data)
60
+ define_transaction_sample_matcher_for(:tags)
61
+ define_transaction_sample_matcher_for(:custom_data)
62
+
63
+ RSpec::Matchers.define :be_completed do
64
+ match(:notify_expectation_failures => true) do |transaction|
65
+ values_match? transaction.ext._completed?, true
66
+ end
67
+ end
68
+
69
+ RSpec::Matchers.define :have_error do |error_class, error_message|
70
+ match(:notify_expectation_failures => true) do |transaction|
71
+ transaction_error = transaction.to_h["error"]
72
+ if error_class && error_message
73
+ expect(transaction_error).to include(
74
+ "name" => error_class,
75
+ "message" => error_message,
76
+ "backtrace" => kind_of(String)
77
+ )
78
+ else
79
+ expect(transaction_error).to be_any
80
+ end
81
+ end
82
+
83
+ match_when_negated(:notify_expectation_failures => true) do |transaction|
84
+ transaction_error = transaction.to_h["error"]
85
+ if error_class && error_message
86
+ expect(transaction_error).to_not include(
87
+ "name" => error_class,
88
+ "message" => error_message,
89
+ "backtrace" => kind_of(String)
90
+ )
91
+ else
92
+ expect(transaction_error).to be_nil
93
+ end
94
+ end
95
+ end
96
+
97
+ RSpec::Matchers.define :include_event do |event|
98
+ match(:notify_expectation_failures => true) do |transaction|
99
+ events = transaction.to_h["events"]
100
+ if event
101
+ expect(events).to include(format_event(event))
102
+ else
103
+ expect(events).to be_any
104
+ end
105
+ end
106
+
107
+ match_when_negated(:notify_expectation_failures => true) do |transaction|
108
+ events = transaction.to_h["events"]
109
+ if event
110
+ expect(events).to_not include(format_event(event))
111
+ else
112
+ expect(events).to be_empty
113
+ end
114
+ end
115
+
116
+ def format_event(event)
117
+ hash_including({
118
+ "body" => "",
119
+ "body_format" => Appsignal::EventFormatter::DEFAULT,
120
+ "count" => 1,
121
+ "name" => kind_of(String),
122
+ "title" => ""
123
+ }.merge(event.transform_keys(&:to_s)))
124
+ end
125
+ end
126
+ RSpec::Matchers.alias_matcher :include_events, :include_event
127
+
128
+ RSpec::Matchers.define :include_metadata do |metadata|
129
+ match(:notify_expectation_failures => true) do |transaction|
130
+ actual_metadata = transaction.to_h["metadata"]
131
+ if metadata
132
+ expect(actual_metadata).to include(metadata)
133
+ else
134
+ expect(actual_metadata).to be_any
135
+ end
136
+ end
137
+
138
+ match_when_negated(:notify_expectation_failures => true) do |transaction|
139
+ actual_metadata = transaction.to_h["metadata"]
140
+ if metadata
141
+ expect(actual_metadata).to_not include(metadata)
142
+ else
143
+ expect(actual_metadata).to be_empty
144
+ end
145
+ end
146
+ end
147
+
148
+ RSpec::Matchers.define :include_breadcrumb do |action, category, message, metadata, time|
149
+ match(:notify_expectation_failures => true) do |transaction|
150
+ breadcrumbs = transaction.to_h.dig("sample_data", "breadcrumbs")
151
+ if action
152
+ breadcrumb = format_breadcrumb(action, category, message, metadata, time)
153
+ expect(breadcrumbs).to include(breadcrumb)
154
+ else
155
+ expect(transaction.to_h.dig("sample_data", "breadcrumbs")).to be_any
156
+ end
157
+ end
158
+
159
+ match_when_negated(:notify_expectation_failures => true) do |transaction|
160
+ breadcrumbs = transaction.to_h.dig("sample_data", "breadcrumbs")
161
+ if action
162
+ breadcrumb = format_breadcrumb(action, category, message, metadata, time)
163
+ expect(breadcrumbs).to_not include(breadcrumb)
164
+ else
165
+ expect(breadcrumbs).to_not be_any
166
+ end
167
+ end
168
+
169
+ def format_breadcrumb(action, category, message, metadata, time)
170
+ {
171
+ "action" => action,
172
+ "category" => category,
173
+ "message" => message,
174
+ "metadata" => metadata,
175
+ "time" => time
176
+ }
177
+ end
178
+ end
179
+ RSpec::Matchers.alias_matcher :include_breadcrumbs, :include_breadcrumb
180
+
181
+ RSpec::Matchers.define :have_queue_start do |queue_start_time|
182
+ match(:notify_expectation_failures => true) do |transaction|
183
+ expect(transaction.ext.queue_start).to eq(queue_start_time)
184
+ end
185
+ end
@@ -0,0 +1,20 @@
1
+ class DummyApp
2
+ def initialize(&app)
3
+ @app = app
4
+ @called = false
5
+ end
6
+
7
+ def call(env)
8
+ if @app
9
+ @app&.call(env)
10
+ else
11
+ [200, {}, "body"]
12
+ end
13
+ ensure
14
+ @called = true
15
+ end
16
+
17
+ def called?
18
+ @called
19
+ end
20
+ end
@@ -1,22 +1,14 @@
1
1
  RSpec.shared_examples "instrument helper" do
2
- let(:stub) { double }
3
- before do
4
- expect(stub).to receive(:method_call).and_return("return value")
5
-
6
- expect(transaction).to receive(:start_event)
7
- expect(transaction).to receive(:finish_event).with(
8
- "name",
9
- "title",
10
- "body",
11
- 0
12
- )
13
- end
2
+ around { |example| keep_transactions { example.run } }
3
+ let(:stub) { double(:method_call => "return value") }
14
4
 
15
5
  it "records an event around the given block" do
16
6
  return_value = instrumenter.instrument "name", "title", "body" do
17
7
  stub.method_call
18
8
  end
19
9
  expect(return_value).to eq "return value"
10
+
11
+ expect_transaction_to_have_event
20
12
  end
21
13
 
22
14
  context "with an error raised in the passed block" do
@@ -27,6 +19,8 @@ RSpec.shared_examples "instrument helper" do
27
19
  raise ExampleException, "foo"
28
20
  end
29
21
  end.to raise_error(ExampleException, "foo")
22
+
23
+ expect_transaction_to_have_event
30
24
  end
31
25
  end
32
26
 
@@ -38,6 +32,17 @@ RSpec.shared_examples "instrument helper" do
38
32
  throw :foo
39
33
  end
40
34
  end.to throw_symbol(:foo)
35
+
36
+ expect_transaction_to_have_event
41
37
  end
42
38
  end
39
+
40
+ def expect_transaction_to_have_event
41
+ expect(transaction).to include_event(
42
+ "name" => "name",
43
+ "title" => "title",
44
+ "body" => "body",
45
+ "body_format" => Appsignal::EventFormatter::DEFAULT
46
+ )
47
+ end
43
48
  end
@@ -120,16 +120,25 @@ end
120
120
 
121
121
  module AppsignalTest
122
122
  module Transaction
123
- # Override the {Appsignal::Transaction.new} method so we can track which
124
- # transactions are created on the {Appsignal::Testing.transactions} list.
125
- #
126
- # @see TransactionHelpers#last_transaction
127
- def new(*_args)
128
- transaction = super
129
- Appsignal::Testing.transactions << transaction
130
- transaction
123
+ module ClassMethods
124
+ # Override the {Appsignal::Transaction.new} method so we can track which
125
+ # transactions are created on the {Appsignal::Testing.transactions} list.
126
+ #
127
+ # @see TransactionHelpers#last_transaction
128
+ def new(*_args)
129
+ transaction = super
130
+ Appsignal::Testing.transactions << transaction
131
+ transaction
132
+ end
133
+ end
134
+
135
+ module InstanceMethods
136
+ def _sample
137
+ sample_data
138
+ end
131
139
  end
132
140
  end
133
141
  end
134
142
 
135
- Appsignal::Transaction.extend(AppsignalTest::Transaction)
143
+ Appsignal::Transaction.extend(AppsignalTest::Transaction::ClassMethods)
144
+ Appsignal::Transaction.prepend(AppsignalTest::Transaction::InstanceMethods)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appsignal
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.9.2
4
+ version: 3.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Beekman
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2024-06-26 00:00:00.000000000 Z
13
+ date: 2024-07-02 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rack
@@ -74,14 +74,14 @@ dependencies:
74
74
  requirements:
75
75
  - - '='
76
76
  - !ruby/object:Gem::Version
77
- version: 1.50.0
77
+ version: 1.64.1
78
78
  type: :development
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
82
  - - '='
83
83
  - !ruby/object:Gem::Version
84
- version: 1.50.0
84
+ version: 1.64.1
85
85
  - !ruby/object:Gem::Dependency
86
86
  name: timecop
87
87
  requirement: !ruby/object:Gem::Requirement
@@ -135,13 +135,13 @@ extra_rdoc_files: []
135
135
  files:
136
136
  - ".github/ISSUE_TEMPLATE/bug_report.md"
137
137
  - ".github/ISSUE_TEMPLATE/chore.md"
138
+ - ".github/workflows/ci.yml"
138
139
  - ".github/workflows/create_release_from_tag.yml"
139
140
  - ".gitignore"
140
141
  - ".gitmodules"
141
142
  - ".rspec"
142
143
  - ".rubocop.yml"
143
144
  - ".rubocop_todo.yml"
144
- - ".semaphore/semaphore.yml"
145
145
  - ".yardopts"
146
146
  - CHANGELOG.md
147
147
  - CODE_OF_CONDUCT.md
@@ -163,7 +163,8 @@ files:
163
163
  - gemfiles/capistrano3.gemfile
164
164
  - gemfiles/dry-monitor.gemfile
165
165
  - gemfiles/grape.gemfile
166
- - gemfiles/hanami.gemfile
166
+ - gemfiles/hanami-2.0.gemfile
167
+ - gemfiles/hanami-2.1.gemfile
167
168
  - gemfiles/http5.gemfile
168
169
  - gemfiles/no_dependencies.gemfile
169
170
  - gemfiles/padrino.gemfile
@@ -274,6 +275,7 @@ files:
274
275
  - lib/appsignal/rack/abstract_middleware.rb
275
276
  - lib/appsignal/rack/event_handler.rb
276
277
  - lib/appsignal/rack/generic_instrumentation.rb
278
+ - lib/appsignal/rack/grape_middleware.rb
277
279
  - lib/appsignal/rack/hanami_middleware.rb
278
280
  - lib/appsignal/rack/rails_instrumentation.rb
279
281
  - lib/appsignal/rack/sinatra_instrumentation.rb
@@ -286,6 +288,7 @@ files:
286
288
  - lib/appsignal/utils/data.rb
287
289
  - lib/appsignal/utils/hash_sanitizer.rb
288
290
  - lib/appsignal/utils/integration_logger.rb
291
+ - lib/appsignal/utils/integration_memory_logger.rb
289
292
  - lib/appsignal/utils/json.rb
290
293
  - lib/appsignal/utils/query_params_sanitizer.rb
291
294
  - lib/appsignal/utils/rails_helper.rb
@@ -296,7 +299,6 @@ files:
296
299
  - mono.yml
297
300
  - resources/appsignal.yml.erb
298
301
  - resources/cacert.pem
299
- - script/lint_git
300
302
  - spec/.rubocop.yml
301
303
  - spec/lib/appsignal/auth_check_spec.rb
302
304
  - spec/lib/appsignal/capistrano2_spec.rb
@@ -357,10 +359,10 @@ files:
357
359
  - spec/lib/appsignal/hooks/webmachine_spec.rb
358
360
  - spec/lib/appsignal/hooks_spec.rb
359
361
  - spec/lib/appsignal/integrations/data_mapper_spec.rb
360
- - spec/lib/appsignal/integrations/grape_spec.rb
361
362
  - spec/lib/appsignal/integrations/hanami_spec.rb
362
363
  - spec/lib/appsignal/integrations/http_spec.rb
363
364
  - spec/lib/appsignal/integrations/mongo_ruby_driver_spec.rb
365
+ - spec/lib/appsignal/integrations/net_http_spec.rb
364
366
  - spec/lib/appsignal/integrations/object_spec.rb
365
367
  - spec/lib/appsignal/integrations/padrino_spec.rb
366
368
  - spec/lib/appsignal/integrations/que_spec.rb
@@ -377,6 +379,7 @@ files:
377
379
  - spec/lib/appsignal/rack/abstract_middleware_spec.rb
378
380
  - spec/lib/appsignal/rack/event_handler_spec.rb
379
381
  - spec/lib/appsignal/rack/generic_instrumentation_spec.rb
382
+ - spec/lib/appsignal/rack/grape_middleware_spec.rb
380
383
  - spec/lib/appsignal/rack/hanami_middleware_spec.rb
381
384
  - spec/lib/appsignal/rack/rails_instrumentation_spec.rb
382
385
  - spec/lib/appsignal/rack/sinatra_instrumentation_spec.rb
@@ -388,6 +391,7 @@ files:
388
391
  - spec/lib/appsignal/utils/data_spec.rb
389
392
  - spec/lib/appsignal/utils/hash_sanitizer_spec.rb
390
393
  - spec/lib/appsignal/utils/integration_logger_spec.rb
394
+ - spec/lib/appsignal/utils/integration_memory_logger_spec.rb
391
395
  - spec/lib/appsignal/utils/json_spec.rb
392
396
  - spec/lib/appsignal/utils/query_params_sanitizer_spec.rb
393
397
  - spec/lib/appsignal_spec.rb
@@ -421,10 +425,11 @@ files:
421
425
  - spec/support/helpers/time_helpers.rb
422
426
  - spec/support/helpers/transaction_helpers.rb
423
427
  - spec/support/helpers/wait_for_helper.rb
424
- - spec/support/matchers/be_completed.rb
425
428
  - spec/support/matchers/contains_log.rb
426
429
  - spec/support/matchers/have_colorized_text.rb
430
+ - spec/support/matchers/transaction.rb
427
431
  - spec/support/mocks/appsignal_mock.rb
432
+ - spec/support/mocks/dummy_app.rb
428
433
  - spec/support/mocks/fake_gc_profiler.rb
429
434
  - spec/support/mocks/fake_gvl_tools.rb
430
435
  - spec/support/mocks/mock_probe.rb
@@ -462,7 +467,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
462
467
  - !ruby/object:Gem::Version
463
468
  version: '0'
464
469
  requirements: []
465
- rubygems_version: 3.5.11
470
+ rubygems_version: 3.3.7
466
471
  signing_key:
467
472
  specification_version: 4
468
473
  summary: Logs performance and exception data from your app to appsignal.com