appsignal 3.9.2-java → 3.9.3-java

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.
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: java
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
@@ -149,13 +149,13 @@ extra_rdoc_files: []
149
149
  files:
150
150
  - ".github/ISSUE_TEMPLATE/bug_report.md"
151
151
  - ".github/ISSUE_TEMPLATE/chore.md"
152
+ - ".github/workflows/ci.yml"
152
153
  - ".github/workflows/create_release_from_tag.yml"
153
154
  - ".gitignore"
154
155
  - ".gitmodules"
155
156
  - ".rspec"
156
157
  - ".rubocop.yml"
157
158
  - ".rubocop_todo.yml"
158
- - ".semaphore/semaphore.yml"
159
159
  - ".yardopts"
160
160
  - CHANGELOG.md
161
161
  - CODE_OF_CONDUCT.md
@@ -177,7 +177,8 @@ files:
177
177
  - gemfiles/capistrano3.gemfile
178
178
  - gemfiles/dry-monitor.gemfile
179
179
  - gemfiles/grape.gemfile
180
- - gemfiles/hanami.gemfile
180
+ - gemfiles/hanami-2.0.gemfile
181
+ - gemfiles/hanami-2.1.gemfile
181
182
  - gemfiles/http5.gemfile
182
183
  - gemfiles/no_dependencies.gemfile
183
184
  - gemfiles/padrino.gemfile
@@ -288,6 +289,7 @@ files:
288
289
  - lib/appsignal/rack/abstract_middleware.rb
289
290
  - lib/appsignal/rack/event_handler.rb
290
291
  - lib/appsignal/rack/generic_instrumentation.rb
292
+ - lib/appsignal/rack/grape_middleware.rb
291
293
  - lib/appsignal/rack/hanami_middleware.rb
292
294
  - lib/appsignal/rack/rails_instrumentation.rb
293
295
  - lib/appsignal/rack/sinatra_instrumentation.rb
@@ -300,6 +302,7 @@ files:
300
302
  - lib/appsignal/utils/data.rb
301
303
  - lib/appsignal/utils/hash_sanitizer.rb
302
304
  - lib/appsignal/utils/integration_logger.rb
305
+ - lib/appsignal/utils/integration_memory_logger.rb
303
306
  - lib/appsignal/utils/json.rb
304
307
  - lib/appsignal/utils/query_params_sanitizer.rb
305
308
  - lib/appsignal/utils/rails_helper.rb
@@ -310,7 +313,6 @@ files:
310
313
  - mono.yml
311
314
  - resources/appsignal.yml.erb
312
315
  - resources/cacert.pem
313
- - script/lint_git
314
316
  - spec/.rubocop.yml
315
317
  - spec/lib/appsignal/auth_check_spec.rb
316
318
  - spec/lib/appsignal/capistrano2_spec.rb
@@ -371,10 +373,10 @@ files:
371
373
  - spec/lib/appsignal/hooks/webmachine_spec.rb
372
374
  - spec/lib/appsignal/hooks_spec.rb
373
375
  - spec/lib/appsignal/integrations/data_mapper_spec.rb
374
- - spec/lib/appsignal/integrations/grape_spec.rb
375
376
  - spec/lib/appsignal/integrations/hanami_spec.rb
376
377
  - spec/lib/appsignal/integrations/http_spec.rb
377
378
  - spec/lib/appsignal/integrations/mongo_ruby_driver_spec.rb
379
+ - spec/lib/appsignal/integrations/net_http_spec.rb
378
380
  - spec/lib/appsignal/integrations/object_spec.rb
379
381
  - spec/lib/appsignal/integrations/padrino_spec.rb
380
382
  - spec/lib/appsignal/integrations/que_spec.rb
@@ -391,6 +393,7 @@ files:
391
393
  - spec/lib/appsignal/rack/abstract_middleware_spec.rb
392
394
  - spec/lib/appsignal/rack/event_handler_spec.rb
393
395
  - spec/lib/appsignal/rack/generic_instrumentation_spec.rb
396
+ - spec/lib/appsignal/rack/grape_middleware_spec.rb
394
397
  - spec/lib/appsignal/rack/hanami_middleware_spec.rb
395
398
  - spec/lib/appsignal/rack/rails_instrumentation_spec.rb
396
399
  - spec/lib/appsignal/rack/sinatra_instrumentation_spec.rb
@@ -402,6 +405,7 @@ files:
402
405
  - spec/lib/appsignal/utils/data_spec.rb
403
406
  - spec/lib/appsignal/utils/hash_sanitizer_spec.rb
404
407
  - spec/lib/appsignal/utils/integration_logger_spec.rb
408
+ - spec/lib/appsignal/utils/integration_memory_logger_spec.rb
405
409
  - spec/lib/appsignal/utils/json_spec.rb
406
410
  - spec/lib/appsignal/utils/query_params_sanitizer_spec.rb
407
411
  - spec/lib/appsignal_spec.rb
@@ -435,10 +439,11 @@ files:
435
439
  - spec/support/helpers/time_helpers.rb
436
440
  - spec/support/helpers/transaction_helpers.rb
437
441
  - spec/support/helpers/wait_for_helper.rb
438
- - spec/support/matchers/be_completed.rb
439
442
  - spec/support/matchers/contains_log.rb
440
443
  - spec/support/matchers/have_colorized_text.rb
444
+ - spec/support/matchers/transaction.rb
441
445
  - spec/support/mocks/appsignal_mock.rb
446
+ - spec/support/mocks/dummy_app.rb
442
447
  - spec/support/mocks/fake_gc_profiler.rb
443
448
  - spec/support/mocks/fake_gvl_tools.rb
444
449
  - spec/support/mocks/mock_probe.rb
@@ -476,7 +481,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
476
481
  - !ruby/object:Gem::Version
477
482
  version: '0'
478
483
  requirements: []
479
- rubygems_version: 3.5.11
484
+ rubygems_version: 3.3.7
480
485
  signing_key:
481
486
  specification_version: 4
482
487
  summary: Logs performance and exception data from your app to appsignal.com