appmap 0.66.1 → 0.68.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -0
  3. data/CHANGELOG.md +45 -0
  4. data/lib/appmap/builtin_hooks/json.yml +4 -0
  5. data/lib/appmap/builtin_hooks/net/http.yml +3 -0
  6. data/lib/appmap/builtin_hooks/openssl.yml +16 -0
  7. data/lib/appmap/builtin_hooks/yaml.yml +10 -0
  8. data/lib/appmap/command/agent_setup/validate.rb +8 -1
  9. data/lib/appmap/command/inspect.rb +0 -1
  10. data/lib/appmap/config.rb +157 -137
  11. data/lib/appmap/depends/api.rb +1 -1
  12. data/lib/appmap/depends/configuration.rb +0 -2
  13. data/lib/appmap/depends/util.rb +1 -1
  14. data/lib/appmap/event.rb +6 -2
  15. data/lib/appmap/gem_hooks/actionpack.yml +40 -0
  16. data/lib/appmap/gem_hooks/actionview.yml +13 -0
  17. data/lib/appmap/gem_hooks/activesupport.yml +12 -0
  18. data/lib/appmap/gem_hooks/cancancan.yml +6 -0
  19. data/lib/appmap/handler/net_http.rb +14 -12
  20. data/lib/appmap/handler/rails/request_handler.rb +4 -10
  21. data/lib/appmap/hook.rb +46 -30
  22. data/lib/appmap/minitest.rb +1 -0
  23. data/lib/appmap/rspec.rb +1 -0
  24. data/lib/appmap/swagger/configuration.rb +2 -0
  25. data/lib/appmap/util.rb +20 -2
  26. data/lib/appmap/version.rb +1 -1
  27. data/lib/appmap.rb +2 -2
  28. data/spec/config_spec.rb +207 -65
  29. data/spec/depends/api_spec.rb +3 -3
  30. data/spec/fixtures/config/missing_path_or_gem.yml +3 -0
  31. data/spec/rails_recording_spec.rb +1 -1
  32. data/spec/rails_spec_helper.rb +6 -1
  33. data/test/agent_setup_validate_test.rb +35 -8
  34. data/test/fixtures/mocha_mock_app/Gemfile +5 -0
  35. data/test/fixtures/mocha_mock_app/appmap.yml +5 -0
  36. data/test/fixtures/mocha_mock_app/lib/sheep.rb +5 -0
  37. data/test/fixtures/mocha_mock_app/test/sheep_test.rb +18 -0
  38. data/test/mock_compatibility_test.rb +45 -0
  39. metadata +17 -3
data/spec/config_spec.rb CHANGED
@@ -4,58 +4,7 @@ require 'rails_spec_helper'
4
4
  require 'appmap/config'
5
5
 
6
6
  describe AppMap::Config, docker: false do
7
- it 'loads from a Hash' do
8
- config_data = {
9
- exclude: [],
10
- name: 'test',
11
- packages: [
12
- {
13
- path: 'path-1'
14
- },
15
- {
16
- path: 'path-2',
17
- exclude: [ 'exclude-1' ]
18
- }
19
- ],
20
- functions: [
21
- {
22
- package: 'pkg',
23
- class: 'cls',
24
- function: 'fn',
25
- label: 'lbl'
26
- }
27
- ]
28
- }.deep_stringify_keys!
29
- config = AppMap::Config.load(config_data)
30
-
31
- config_expectation = {
32
- exclude: [],
33
- name: 'test',
34
- packages: [
35
- {
36
- path: 'path-1',
37
- handler_class: 'AppMap::Handler::Function'
38
- },
39
- {
40
- path: 'path-2',
41
- handler_class: 'AppMap::Handler::Function',
42
- exclude: [ 'exclude-1' ]
43
- }
44
- ],
45
- functions: [
46
- {
47
- package: 'pkg',
48
- class: 'cls',
49
- functions: [ :fn ],
50
- labels: ['lbl']
51
- }
52
- ]
53
- }.deep_stringify_keys!
54
-
55
- expect(config.to_h.deep_stringify_keys!).to eq(config_expectation)
56
- end
57
-
58
- it 'interprets a function in canonical name format' do
7
+ it 'loads as expected' do
59
8
  config_data = {
60
9
  name: 'test',
61
10
  packages: [],
@@ -67,20 +16,212 @@ describe AppMap::Config, docker: false do
67
16
  }.deep_stringify_keys!
68
17
  config = AppMap::Config.load(config_data)
69
18
 
70
- config_expectation = {
71
- exclude: [],
72
- name: 'test',
73
- packages: [],
74
- functions: [
19
+ expect(JSON.parse(JSON.generate(config.as_json))).to eq(JSON.parse(<<~FIXTURE))
20
+ {
21
+ "name": "test",
22
+ "appmap_dir": "tmp/appmap",
23
+ "packages": [
24
+ ],
25
+ "swagger_config": {
26
+ "project_name": null,
27
+ "project_version": "1.0",
28
+ "output_dir": "swagger",
29
+ "description": "Generate Swagger from AppMaps"
30
+ },
31
+ "depends_config": {
32
+ "base_dir": null,
33
+ "base_branches": [
34
+ "remotes/origin/main",
35
+ "remotes/origin/master"
36
+ ],
37
+ "test_file_patterns": [
38
+ "spec/**/*_spec.rb",
39
+ "test/**/*_test.rb"
40
+ ],
41
+ "dependent_tasks": [
42
+ "swagger"
43
+ ],
44
+ "description": "Bring AppMaps up to date with local file modifications, and updated derived data such as Swagger files",
45
+ "rspec_environment_method": "AppMap::Depends.test_env",
46
+ "minitest_environment_method": "AppMap::Depends.test_env",
47
+ "rspec_select_tests_method": "AppMap::Depends.select_rspec_tests",
48
+ "minitest_select_tests_method": "AppMap::Depends.select_minitest_tests",
49
+ "rspec_test_command_method": "AppMap::Depends.rspec_test_command",
50
+ "minitest_test_command_method": "AppMap::Depends.minitest_test_command"
51
+ },
52
+ "hook_paths": [
53
+ "pkg",
54
+ "#{Gem.loaded_specs['activesupport'].gem_dir}"
55
+ ],
56
+ "exclude": [
57
+ ],
58
+ "functions": [
75
59
  {
76
- package: 'pkg',
77
- class: 'cls',
78
- functions: [ :fn ],
60
+ "cls": "cls",
61
+ "target_methods": {
62
+ "package": "pkg",
63
+ "method_names": [
64
+ "fn"
65
+ ]
66
+ }
79
67
  }
80
- ]
81
- }.deep_stringify_keys!
82
-
83
- expect(config.to_h.deep_stringify_keys!).to eq(config_expectation)
68
+ ],
69
+ "builtin_hooks": {
70
+ "JSON::Ext::Parser": [
71
+ {
72
+ "package": "json",
73
+ "method_names": [
74
+ "parse"
75
+ ]
76
+ }
77
+ ],
78
+ "JSON::Ext::Generator::State": [
79
+ {
80
+ "package": "json",
81
+ "method_names": [
82
+ "generate"
83
+ ]
84
+ }
85
+ ],
86
+ "Net::HTTP": [
87
+ {
88
+ "package": "net/http",
89
+ "method_names": [
90
+ "request"
91
+ ]
92
+ }
93
+ ],
94
+ "OpenSSL::PKey::PKey": [
95
+ {
96
+ "package": "openssl",
97
+ "method_names": [
98
+ "sign"
99
+ ]
100
+ }
101
+ ],
102
+ "OpenSSL::X509::Request": [
103
+ {
104
+ "package": "openssl",
105
+ "method_names": [
106
+ "sign"
107
+ ]
108
+ },
109
+ {
110
+ "package": "openssl",
111
+ "method_names": [
112
+ "verify"
113
+ ]
114
+ }
115
+ ],
116
+ "OpenSSL::X509::Certificate": [
117
+ {
118
+ "package": "openssl",
119
+ "method_names": [
120
+ "sign"
121
+ ]
122
+ }
123
+ ],
124
+ "OpenSSL::PKCS5": [
125
+ {
126
+ "package": "openssl",
127
+ "method_names": [
128
+ "pbkdf2_hmac"
129
+ ]
130
+ },
131
+ {
132
+ "package": "openssl",
133
+ "method_names": [
134
+ "pbkdf2_hmac_sha1"
135
+ ]
136
+ }
137
+ ],
138
+ "OpenSSL::Cipher": [
139
+ {
140
+ "package": "openssl",
141
+ "method_names": [
142
+ "encrypt"
143
+ ]
144
+ },
145
+ {
146
+ "package": "openssl",
147
+ "method_names": [
148
+ "decrypt"
149
+ ]
150
+ }
151
+ ],
152
+ "Psych": [
153
+ {
154
+ "package": "yaml",
155
+ "method_names": [
156
+ "load"
157
+ ]
158
+ },
159
+ {
160
+ "package": "yaml",
161
+ "method_names": [
162
+ "load_stream"
163
+ ]
164
+ },
165
+ {
166
+ "package": "yaml",
167
+ "method_names": [
168
+ "parse"
169
+ ]
170
+ },
171
+ {
172
+ "package": "yaml",
173
+ "method_names": [
174
+ "parse_stream"
175
+ ]
176
+ },
177
+ {
178
+ "package": "yaml",
179
+ "method_names": [
180
+ "dump"
181
+ ]
182
+ },
183
+ {
184
+ "package": "yaml",
185
+ "method_names": [
186
+ "dump_stream"
187
+ ]
188
+ }
189
+ ]
190
+ },
191
+ "gem_hooks": {
192
+ "cls": [
193
+ {
194
+ "package": "pkg",
195
+ "method_names": [
196
+ "fn"
197
+ ]
198
+ }
199
+ ],
200
+ "ActiveSupport::Callbacks::CallbackSequence": [
201
+ {
202
+ "package": "activesupport",
203
+ "method_names": [
204
+ "invoke_before"
205
+ ]
206
+ },
207
+ {
208
+ "package": "activesupport",
209
+ "method_names": [
210
+ "invoke_after"
211
+ ]
212
+ }
213
+ ],
214
+ "ActiveSupport::SecurityUtils": [
215
+ {
216
+ "package": "activesupport",
217
+ "method_names": [
218
+ "secure_compare"
219
+ ]
220
+ }
221
+ ]
222
+ }
223
+ }
224
+ FIXTURE
84
225
  end
85
226
 
86
227
  context do
@@ -94,7 +235,8 @@ describe AppMap::Config, docker: false do
94
235
  expect(config.to_h).to eq(YAML.load(<<~CONFIG))
95
236
  :name: appmap-ruby
96
237
  :packages:
97
- - :path: lib
238
+ - :name: lib
239
+ :path: lib
98
240
  :handler_class: AppMap::Handler::Function
99
241
  :shallow: false
100
242
  :functions: []
@@ -93,9 +93,9 @@ describe 'Depends API' do
93
93
 
94
94
  test_report.clean_appmaps
95
95
 
96
- expect(File.exists?(new_spec_file)).to be_falsey
96
+ expect(File.exist?(new_spec_file)).to be_falsey
97
97
  ensure
98
- FileUtils.rm_f new_spec_file if File.exists?(new_spec_file)
98
+ FileUtils.rm_f new_spec_file if File.exist?(new_spec_file)
99
99
  FileUtils.rm_rf new_spec_file.split('.')[0]
100
100
  end
101
101
  end
@@ -104,7 +104,7 @@ describe 'Depends API' do
104
104
  describe '.run_tests' do
105
105
  def run_tests
106
106
  Dir.chdir 'spec/fixtures/depends' do
107
- api.run_tests([ 'spec/actual_rspec_test.rb', 'test/actual_minitest_test.rb' ], appmap_dir: Pathname.new(DEPENDS_TEST_DIR).expand_path.to_s)
107
+ api.run_tests([ 'spec/actual_rspec_test.rb', 'test/actual_minitest_test.rb' ], appmap_dir: Pathname.new('.').expand_path.to_s)
108
108
  end
109
109
  end
110
110
 
@@ -0,0 +1,3 @@
1
+ name: name
2
+ packages:
3
+ - dogs: are friendly
@@ -58,7 +58,7 @@ describe 'Rails' do
58
58
  hash_including(
59
59
  'http_server_response' => hash_including(
60
60
  'status_code' => 201,
61
- 'mime_type' => 'application/json; charset=utf-8',
61
+ 'headers' => hash_including('Content-Type' => 'application/json; charset=utf-8'),
62
62
  )
63
63
  )
64
64
  )
@@ -5,9 +5,14 @@ require 'active_support'
5
5
  require 'active_support/core_ext'
6
6
  require 'open3'
7
7
 
8
+ # docker compose v2 replaced the --filter flag with --status
9
+ PS_CMD=`docker-compose --version` =~ /version v2/ ?
10
+ "docker-compose ps -q --status running" :
11
+ "docker-compose ps -q --filter health=healthy"
12
+
8
13
  def wait_for_container(app_name)
9
14
  start_time = Time.now
10
- until `docker-compose ps -q --filter health=healthy #{app_name}`.strip != ''
15
+ until `#{PS_CMD} #{app_name}`.strip != ''
11
16
  elapsed = Time.now - start_time
12
17
  raise "Timeout waiting for container #{app_name} to be ready" if elapsed > 10
13
18
 
@@ -2,27 +2,40 @@
2
2
 
3
3
  require 'test_helper'
4
4
 
5
+ schema_path = File.expand_path('../../config-schema.yml', __FILE__)
6
+ CONFIG_SCHEMA = YAML.safe_load(File.read(schema_path))
5
7
  class AgentSetupValidateTest < Minitest::Test
6
8
  NON_EXISTING_CONFIG_FILENAME = '123.yml'
7
9
  INVALID_YAML_CONFIG_FILENAME = 'spec/fixtures/config/invalid_yaml_config.yml'
8
10
  INVALID_CONFIG_FILENAME = 'spec/fixtures/config/invalid_config.yml'
11
+ MISSING_PATH_OR_GEM_CONFIG_FILENAME = 'spec/fixtures/config/missing_path_or_gem.yml'
9
12
 
13
+ def check_output(output, expected_errors)
14
+ expected = JSON.pretty_generate(
15
+ {
16
+ version: 2,
17
+ errors: expected_errors,
18
+ schema: CONFIG_SCHEMA
19
+ }
20
+ )
21
+ assert_equal(expected, output.strip)
22
+ end
23
+
10
24
  def test_init_when_config_exists
11
25
  output = `./exe/appmap-agent-validate`
12
26
  assert_equal 0, $CHILD_STATUS.exitstatus
13
- expected = JSON.pretty_generate([
27
+ check_output(output, [
14
28
  {
15
29
  level: :error,
16
30
  message: 'AppMap auto-configuration is currently not available for non Rails projects'
17
31
  }
18
32
  ])
19
- assert_equal expected, output.strip
20
33
  end
21
34
 
22
35
  def test_init_with_non_existing_config_file
23
36
  output = `./exe/appmap-agent-validate -c #{NON_EXISTING_CONFIG_FILENAME}`
24
37
  assert_equal 0, $CHILD_STATUS.exitstatus
25
- expected = JSON.pretty_generate([
38
+ check_output(output, [
26
39
  {
27
40
  level: :error,
28
41
  message: 'AppMap auto-configuration is currently not available for non Rails projects'
@@ -33,13 +46,12 @@ class AgentSetupValidateTest < Minitest::Test
33
46
  message: "AppMap configuration #{NON_EXISTING_CONFIG_FILENAME} file does not exist"
34
47
  }
35
48
  ])
36
- assert_equal expected, output.strip
37
49
  end
38
50
 
39
51
  def test_init_with_invalid_YAML
40
52
  output = `./exe/appmap-agent-validate -c #{INVALID_YAML_CONFIG_FILENAME}`
41
53
  assert_equal 0, $CHILD_STATUS.exitstatus
42
- expected = JSON.pretty_generate([
54
+ check_output(output, [
43
55
  {
44
56
  level: :error,
45
57
  message: 'AppMap auto-configuration is currently not available for non Rails projects'
@@ -52,13 +64,12 @@ class AgentSetupValidateTest < Minitest::Test
52
64
  'did not find expected key while parsing a block mapping at line 1 column 1'
53
65
  }
54
66
  ])
55
- assert_equal expected, output.strip
56
67
  end
57
68
 
58
69
  def test_init_with_invalid_data_config
59
70
  output = `./exe/appmap-agent-validate -c #{INVALID_CONFIG_FILENAME}`
60
71
  assert_equal 0, $CHILD_STATUS.exitstatus
61
- expected = JSON.pretty_generate([
72
+ check_output(output, [
62
73
  {
63
74
  level: :error,
64
75
  message: 'AppMap auto-configuration is currently not available for non Rails projects'
@@ -70,6 +81,22 @@ class AgentSetupValidateTest < Minitest::Test
70
81
  detailed_message: "no implicit conversion of String into Integer"
71
82
  }
72
83
  ])
73
- assert_equal expected, output.strip
84
+ end
85
+
86
+ def test_init_with_missing_package_key
87
+ output = `./exe/appmap-agent-validate -c #{MISSING_PATH_OR_GEM_CONFIG_FILENAME}`
88
+ assert_equal 0, $CHILD_STATUS.exitstatus
89
+ check_output(output, [
90
+ {
91
+ level: :error,
92
+ message: 'AppMap auto-configuration is currently not available for non Rails projects'
93
+ },
94
+ {
95
+ level: :error,
96
+ filename: MISSING_PATH_OR_GEM_CONFIG_FILENAME,
97
+ message: "AppMap configuration #{MISSING_PATH_OR_GEM_CONFIG_FILENAME} could not be loaded",
98
+ detailed_message: "AppMap config 'package' element should specify 'gem' or 'path'"
99
+ }
100
+ ])
74
101
  end
75
102
  end
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'appmap', git: 'applandinc/appmap-ruby', branch: `git rev-parse --abbrev-ref HEAD`.strip
4
+ gem 'minitest'
5
+ gem 'mocha'
@@ -0,0 +1,5 @@
1
+ name: mocha_mock_app
2
+ packages:
3
+ - path: lib
4
+ - gem: mocha
5
+ shallow: false
@@ -0,0 +1,5 @@
1
+ class Sheep
2
+ def baa
3
+ 'baa'
4
+ end
5
+ end
@@ -0,0 +1,18 @@
1
+ $LOAD_PATH.unshift File.expand_path('../lib', __dir__)
2
+
3
+ require 'minitest/autorun'
4
+
5
+ require 'appmap'
6
+ require 'appmap/minitest' if ENV['APPMAP_AUTOREQUIRE'] == 'false'
7
+
8
+ require 'sheep'
9
+ require 'mocha/minitest'
10
+
11
+ class SheepTest < Minitest::Test
12
+ def test_sheep
13
+ sheep = mock('sheep')
14
+ sheep.responds_like(Sheep.new)
15
+ sheep.expects(:baa).returns('baa')
16
+ sheep.baa
17
+ end
18
+ end
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'test_helper'
5
+
6
+ class MockCompatibilityTest < Minitest::Test
7
+ def perform_minitest_test(test_name, env = {})
8
+ Bundler.with_clean_env do
9
+ Dir.chdir 'test/fixtures/mocha_mock_app' do
10
+ FileUtils.rm_rf 'tmp'
11
+ system 'bundle config --local local.appmap ../../..'
12
+ system 'bundle'
13
+ system(env.merge({ 'APPMAP' => 'true' }), %(bundle exec ruby -Ilib -Itest test/#{test_name}_test.rb))
14
+
15
+ yield
16
+ end
17
+ end
18
+ end
19
+
20
+ def test_expectation
21
+ perform_minitest_test('sheep') do
22
+ appmap_file = 'tmp/appmap/minitest/Sheep_sheep.appmap.json'
23
+
24
+ assert File.file?(appmap_file), 'appmap output file does not exist'
25
+ appmap = JSON.parse(File.read(appmap_file))
26
+ assert_equal AppMap::APPMAP_FORMAT_VERSION, appmap['version']
27
+ assert_includes appmap.keys, 'metadata'
28
+ metadata = appmap['metadata']
29
+ assert_equal 'succeeded', metadata['test_status']
30
+ end
31
+ end
32
+
33
+ def test_expectation_without_autorequire
34
+ perform_minitest_test('sheep', 'APPMAP_AUTOREQUIRE' => 'false') do
35
+ appmap_file = 'tmp/appmap/minitest/Sheep_sheep.appmap.json'
36
+
37
+ assert File.file?(appmap_file), 'appmap output file does not exist'
38
+ appmap = JSON.parse(File.read(appmap_file))
39
+ assert_equal AppMap::APPMAP_FORMAT_VERSION, appmap['version']
40
+ assert_includes appmap.keys, 'metadata'
41
+ metadata = appmap['metadata']
42
+ assert_equal 'succeeded', metadata['test_status']
43
+ end
44
+ end
45
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appmap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.66.1
4
+ version: 0.68.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Gilpin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-09-29 00:00:00.000000000 Z
11
+ date: 2021-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -3405,6 +3405,10 @@ files:
3405
3405
  - ext/appmap/extconf.rb
3406
3406
  - lib/appmap.rb
3407
3407
  - lib/appmap/agent.rb
3408
+ - lib/appmap/builtin_hooks/json.yml
3409
+ - lib/appmap/builtin_hooks/net/http.yml
3410
+ - lib/appmap/builtin_hooks/openssl.yml
3411
+ - lib/appmap/builtin_hooks/yaml.yml
3408
3412
  - lib/appmap/class_map.rb
3409
3413
  - lib/appmap/command/agent_setup/init.rb
3410
3414
  - lib/appmap/command/agent_setup/status.rb
@@ -3423,6 +3427,10 @@ files:
3423
3427
  - lib/appmap/depends/test_runner.rb
3424
3428
  - lib/appmap/depends/util.rb
3425
3429
  - lib/appmap/event.rb
3430
+ - lib/appmap/gem_hooks/actionpack.yml
3431
+ - lib/appmap/gem_hooks/actionview.yml
3432
+ - lib/appmap/gem_hooks/activesupport.yml
3433
+ - lib/appmap/gem_hooks/cancancan.yml
3426
3434
  - lib/appmap/handler/function.rb
3427
3435
  - lib/appmap/handler/net_http.rb
3428
3436
  - lib/appmap/handler/rails/request_handler.rb
@@ -3462,6 +3470,7 @@ files:
3462
3470
  - spec/fixtures/config/incomplete_config.yml
3463
3471
  - spec/fixtures/config/invalid_config.yml
3464
3472
  - spec/fixtures/config/invalid_yaml_config.yml
3473
+ - spec/fixtures/config/missing_path_or_gem.yml
3465
3474
  - spec/fixtures/config/valid_config.yml
3466
3475
  - spec/fixtures/depends/.gitignore
3467
3476
  - spec/fixtures/depends/app/controllers/api/api_keys_controller.rb
@@ -3698,6 +3707,10 @@ files:
3698
3707
  - test/fixtures/minitest_recorder/appmap.yml
3699
3708
  - test/fixtures/minitest_recorder/lib/hello.rb
3700
3709
  - test/fixtures/minitest_recorder/test/hello_test.rb
3710
+ - test/fixtures/mocha_mock_app/Gemfile
3711
+ - test/fixtures/mocha_mock_app/appmap.yml
3712
+ - test/fixtures/mocha_mock_app/lib/sheep.rb
3713
+ - test/fixtures/mocha_mock_app/test/sheep_test.rb
3701
3714
  - test/fixtures/openssl_recorder/Gemfile
3702
3715
  - test/fixtures/openssl_recorder/appmap.yml
3703
3716
  - test/fixtures/openssl_recorder/lib/openssl_cert_sign.rb
@@ -3714,6 +3727,7 @@ files:
3714
3727
  - test/gem_test.rb
3715
3728
  - test/inspect_cli_test.rb
3716
3729
  - test/minitest_test.rb
3730
+ - test/mock_compatibility_test.rb
3717
3731
  - test/openssl_test.rb
3718
3732
  - test/record_process_test.rb
3719
3733
  - test/rspec_test.rb
@@ -3738,7 +3752,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
3738
3752
  - !ruby/object:Gem::Version
3739
3753
  version: '0'
3740
3754
  requirements: []
3741
- rubygems_version: 3.0.8
3755
+ rubygems_version: 3.0.6
3742
3756
  signing_key:
3743
3757
  specification_version: 4
3744
3758
  summary: Record the operation of a Ruby program, using the AppLand 'AppMap' format.