appmap 0.52.1 → 0.54.3

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 (55) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +16 -10
  3. data/CHANGELOG.md +41 -0
  4. data/Rakefile +13 -4
  5. data/appmap.gemspec +1 -1
  6. data/exe/appmap-agent-init +19 -0
  7. data/lib/appmap.rb +31 -112
  8. data/lib/appmap/agent.rb +115 -0
  9. data/lib/appmap/class_map.rb +2 -2
  10. data/lib/appmap/config.rb +11 -3
  11. data/lib/appmap/handler/net_http.rb +3 -2
  12. data/lib/appmap/handler/rails/request_handler.rb +2 -1
  13. data/lib/appmap/handler/rails/template.rb +2 -1
  14. data/lib/appmap/hook.rb +0 -1
  15. data/lib/appmap/hook/method.rb +36 -28
  16. data/lib/appmap/metadata.rb +4 -2
  17. data/lib/appmap/minitest.rb +2 -0
  18. data/lib/appmap/railtie.rb +2 -2
  19. data/lib/appmap/rspec.rb +5 -3
  20. data/lib/appmap/swagger.rb +2 -0
  21. data/lib/appmap/swagger/configuration.rb +70 -0
  22. data/lib/appmap/swagger/markdown_descriptions.rb +43 -0
  23. data/lib/appmap/swagger/rake_tasks.rb +43 -0
  24. data/lib/appmap/swagger/stable.rb +37 -0
  25. data/lib/appmap/trace.rb +2 -0
  26. data/lib/appmap/util.rb +17 -1
  27. data/lib/appmap/version.rb +1 -1
  28. data/package.json +0 -1
  29. data/release.sh +0 -1
  30. data/spec/config_spec.rb +0 -1
  31. data/spec/fixtures/hook/.gitignore +2 -0
  32. data/spec/fixtures/hook/app/controllers/api/api_keys_controller.rb +1 -0
  33. data/spec/fixtures/hook/app/controllers/organizations_controller.rb +1 -0
  34. data/spec/fixtures/hook/app/models/api_key.rb +1 -0
  35. data/spec/fixtures/hook/app/models/configuration.rb +1 -0
  36. data/spec/fixtures/hook/app/models/show.rb +1 -0
  37. data/spec/fixtures/hook/app/models/user.rb +1 -0
  38. data/spec/fixtures/hook/kwargs.rb +11 -0
  39. data/spec/fixtures/hook/revoke_api_key.appmap.json +847 -0
  40. data/spec/fixtures/hook/spec/api_spec.rb +1 -0
  41. data/spec/fixtures/hook/spec/user_spec.rb +1 -0
  42. data/spec/fixtures/hook/user_page_scenario.appmap.json +1722 -0
  43. data/spec/fixtures/rails5_users_app/config/environments/test.rb +3 -0
  44. data/spec/fixtures/rails6_users_app/Dockerfile +0 -1
  45. data/spec/fixtures/rails6_users_app/appmap.yml +3 -1
  46. data/spec/fixtures/rails6_users_app/config/environments/test.rb +3 -0
  47. data/spec/fixtures/rails6_users_app/lib/tasks/appmap.rake +13 -0
  48. data/spec/hook_spec.rb +9 -0
  49. data/spec/rails_recording_spec.rb +1 -1
  50. data/spec/record_net_http_spec.rb +1 -0
  51. data/spec/swagger/swagger_spec.rb +47 -0
  52. data/test/{agent_setup_cli_test.rb → agent_setup_init_test.rb} +4 -4
  53. data/test/gem_test.rb +1 -0
  54. metadata +39 -19
  55. data/exe/appmap-agent-setup +0 -47
@@ -1,3 +1,6 @@
1
+ require 'active_support'
2
+ require 'active_support/core_ext'
3
+
1
4
  Rails.application.configure do
2
5
  # Settings specified here will take precedence over those in config/application.rb.
3
6
 
@@ -2,7 +2,6 @@ ARG GEM_VERSION
2
2
  ARG RUBY_VERSION
3
3
 
4
4
  FROM appmap:${GEM_VERSION} as appmap
5
-
6
5
  FROM ruby:${RUBY_VERSION}
7
6
 
8
7
  SHELL ["/bin/bash", "-c"]
@@ -5,4 +5,6 @@ packages:
5
5
  - path: app/controllers
6
6
  labels: [ mvc.controller ]
7
7
  - gem: sequel
8
-
8
+ swagger:
9
+ project_version: 1.1.0
10
+ output_dir: tmp/swagger
@@ -1,3 +1,6 @@
1
+ require 'active_support'
2
+ require 'active_support/core_ext'
3
+
1
4
  Rails.application.configure do
2
5
  # Settings specified here will take precedence over those in config/application.rb.
3
6
 
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :appmap do
4
+ def swagger_tasks
5
+ require 'appmap/swagger'
6
+
7
+ AppMap::Swagger::RakeTasks.define_tasks
8
+ end
9
+
10
+ if %w[test development].member?(Rails.env)
11
+ swagger_tasks
12
+ end
13
+ end
data/spec/hook_spec.rb CHANGED
@@ -985,4 +985,13 @@ describe 'AppMap class Hooking', docker: false do
985
985
  expect(InstanceMethod.new.method(:say_echo).arity).to be(1)
986
986
  end
987
987
  end
988
+
989
+ describe 'kwargs handling' do
990
+ # https://github.com/applandinc/appmap-ruby/issues/153
991
+ it 'empty hash for **kwrest can be proxied as a regular function argument', github_issue: 153 do
992
+ invoke_test_file 'spec/fixtures/hook/kwargs.rb' do
993
+ expect(Kwargs.has_kwrest_calls_no_kwargs(nil, {})).to eq({})
994
+ end
995
+ end
996
+ end
988
997
  end
@@ -224,7 +224,7 @@ describe 'Rails' do
224
224
  'name' => 'ActionView',
225
225
  'children' => include(hash_including(
226
226
  # Rails 6/5 difference
227
- 'name' => /^(Template)?Renderer$/,
227
+ 'name' => /^(Template)?Renderer$/,
228
228
  'children' => include(hash_including(
229
229
  'name' => 'render',
230
230
  'labels' => ['mvc.view']
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
2
  require 'diffy'
3
3
  require 'rack'
4
+ require 'webrick'
4
5
  require 'rack/handler/webrick'
5
6
 
6
7
  class HelloWorldApp
@@ -0,0 +1,47 @@
1
+ require_relative '../rails_spec_helper'
2
+
3
+ describe 'rake appmap:swagger' do
4
+ include_context 'Rails app pg database', "spec/fixtures/rails6_users_app" unless use_existing_data?
5
+ include_context 'rails integration test setup'
6
+
7
+ def run_spec(spec_name)
8
+ cmd = <<~CMD.gsub "\n", ' '
9
+ docker-compose run --rm -e RAILS_ENV=test -e APPMAP=true
10
+ -v #{File.absolute_path tmpdir}:/app/tmp app ./bin/rspec #{spec_name}
11
+ CMD
12
+ run_cmd cmd, chdir: fixture_dir
13
+ end
14
+
15
+ def generate_swagger
16
+ cmd = <<~CMD.gsub "\n", ' '
17
+ docker-compose run --rm -v #{File.absolute_path tmpdir}:/app/tmp app ./bin/rake appmap:swagger
18
+ CMD
19
+ run_cmd cmd, chdir: fixture_dir
20
+ end
21
+
22
+ unless use_existing_data?
23
+ before(:all) do
24
+ generate_swagger
25
+ end
26
+ end
27
+
28
+ # The swagger-building logic is mostly in the JS code. So what we are really testing here
29
+ # is the Rails integration - the rake task and integration with the appmap.yml.
30
+ # And of course the bundling of the JS code by the appmap gem.
31
+ it 'generates openapi_stable.yml' do
32
+ swagger = YAML.load(File.read(File.join(tmpdir, 'swagger', 'openapi_stable.yaml'))).deep_symbolize_keys
33
+
34
+ expect(swagger).to match(
35
+ hash_including(
36
+ openapi: /^\d\.\d\.\d$/,
37
+ info: {
38
+ title: 'Usersapp API',
39
+ version: '1.1.0'
40
+ },
41
+ paths: hash_including(
42
+ :'/api/users' => an_instance_of(Hash)
43
+ )
44
+ )
45
+ )
46
+ end
47
+ end
@@ -3,7 +3,7 @@
3
3
 
4
4
  require 'test_helper'
5
5
 
6
- class AgentSetupCLITest < Minitest::Test
6
+ class AgentSetupInitTest < Minitest::Test
7
7
  CONFIG_FILENAME = '123.yml'
8
8
  SUBFOLDER_CONFIG_FILEPATH = 'conf/123.yml'
9
9
  EXPECTED_CONFIG_CONTENT = %(name: appmap-ruby
@@ -12,13 +12,13 @@ packages:
12
12
  )
13
13
 
14
14
  def test_init_when_config_exists
15
- output = `./exe/appmap-agent-setup init`
15
+ output = `./exe/appmap-agent-init`
16
16
  assert_equal 0, $CHILD_STATUS.exitstatus
17
17
  assert_includes output, 'The AppMap config file appmap.yml already exists.'
18
18
  end
19
19
 
20
20
  def test_init_with_custom_config_filename
21
- output = `./exe/appmap-agent-setup -c #{CONFIG_FILENAME} init`
21
+ output = `./exe/appmap-agent-init -c #{CONFIG_FILENAME}`
22
22
  assert_equal 0, $CHILD_STATUS.exitstatus
23
23
  assert_includes output, "The following AppMap config file #{CONFIG_FILENAME} has been created:"
24
24
  assert_equal EXPECTED_CONFIG_CONTENT, File.read(CONFIG_FILENAME)
@@ -27,7 +27,7 @@ packages:
27
27
  end
28
28
 
29
29
  def test_init_with_custom_config_file_in_subfolder
30
- output = `./exe/appmap-agent-setup -c #{SUBFOLDER_CONFIG_FILEPATH} init`
30
+ output = `./exe/appmap-agent-init --config=#{SUBFOLDER_CONFIG_FILEPATH}`
31
31
  assert_equal 0, $CHILD_STATUS.exitstatus
32
32
  assert_includes output, "The following AppMap config file #{SUBFOLDER_CONFIG_FILEPATH} has been created:"
33
33
  assert_equal EXPECTED_CONFIG_CONTENT, File.read(SUBFOLDER_CONFIG_FILEPATH)
data/test/gem_test.rb CHANGED
@@ -3,6 +3,7 @@
3
3
 
4
4
  require 'test_helper'
5
5
  require 'English'
6
+ require 'json'
6
7
 
7
8
  class GemTest < Minitest::Test
8
9
  def perform_gem_test(test_name)
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.52.1
4
+ version: 0.54.3
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-06-23 00:00:00.000000000 Z
11
+ date: 2021-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: gli
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: method_source
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -290,11 +276,25 @@ dependencies:
290
276
  - - ">="
291
277
  - !ruby/object:Gem::Version
292
278
  version: '0'
279
+ - !ruby/object:Gem::Dependency
280
+ name: webrick
281
+ requirement: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - ">="
284
+ - !ruby/object:Gem::Version
285
+ version: '0'
286
+ type: :development
287
+ prerelease: false
288
+ version_requirements: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - ">="
291
+ - !ruby/object:Gem::Version
292
+ version: '0'
293
293
  description:
294
294
  email:
295
295
  - kgilpin@gmail.com
296
296
  executables:
297
- - appmap-agent-setup
297
+ - appmap-agent-init
298
298
  - appmap-inspect
299
299
  extensions:
300
300
  - ext/appmap/extconf.rb
@@ -323,11 +323,12 @@ files:
323
323
  - examples/mock_webapp/lib/mock_webapp/controller.rb
324
324
  - examples/mock_webapp/lib/mock_webapp/request.rb
325
325
  - examples/mock_webapp/lib/mock_webapp/user.rb
326
- - exe/appmap-agent-setup
326
+ - exe/appmap-agent-init
327
327
  - exe/appmap-inspect
328
328
  - ext/appmap/appmap.c
329
329
  - ext/appmap/extconf.rb
330
330
  - lib/appmap.rb
331
+ - lib/appmap/agent.rb
331
332
  - lib/appmap/class_map.rb
332
333
  - lib/appmap/command/agent_setup/init.rb
333
334
  - lib/appmap/command/inspect.rb
@@ -351,6 +352,11 @@ files:
351
352
  - lib/appmap/record.rb
352
353
  - lib/appmap/rspec.rb
353
354
  - lib/appmap/service/guesser.rb
355
+ - lib/appmap/swagger.rb
356
+ - lib/appmap/swagger/configuration.rb
357
+ - lib/appmap/swagger/markdown_descriptions.rb
358
+ - lib/appmap/swagger/rake_tasks.rb
359
+ - lib/appmap/swagger/stable.rb
354
360
  - lib/appmap/trace.rb
355
361
  - lib/appmap/util.rb
356
362
  - lib/appmap/version.rb
@@ -358,6 +364,13 @@ files:
358
364
  - release.sh
359
365
  - spec/class_map_spec.rb
360
366
  - spec/config_spec.rb
367
+ - spec/fixtures/hook/.gitignore
368
+ - spec/fixtures/hook/app/controllers/api/api_keys_controller.rb
369
+ - spec/fixtures/hook/app/controllers/organizations_controller.rb
370
+ - spec/fixtures/hook/app/models/api_key.rb
371
+ - spec/fixtures/hook/app/models/configuration.rb
372
+ - spec/fixtures/hook/app/models/show.rb
373
+ - spec/fixtures/hook/app/models/user.rb
361
374
  - spec/fixtures/hook/attr_accessor.rb
362
375
  - spec/fixtures/hook/compare.rb
363
376
  - spec/fixtures/hook/constructor.rb
@@ -365,9 +378,14 @@ files:
365
378
  - spec/fixtures/hook/exception_method.rb
366
379
  - spec/fixtures/hook/exclude.rb
367
380
  - spec/fixtures/hook/instance_method.rb
381
+ - spec/fixtures/hook/kwargs.rb
368
382
  - spec/fixtures/hook/labels.rb
369
383
  - spec/fixtures/hook/method_named_call.rb
384
+ - spec/fixtures/hook/revoke_api_key.appmap.json
370
385
  - spec/fixtures/hook/singleton_method.rb
386
+ - spec/fixtures/hook/spec/api_spec.rb
387
+ - spec/fixtures/hook/spec/user_spec.rb
388
+ - spec/fixtures/hook/user_page_scenario.appmap.json
371
389
  - spec/fixtures/rack_users_app/.dockerignore
372
390
  - spec/fixtures/rack_users_app/.gitignore
373
391
  - spec/fixtures/rack_users_app/Dockerfile
@@ -510,6 +528,7 @@ files:
510
528
  - spec/fixtures/rails6_users_app/features/support/hooks.rb
511
529
  - spec/fixtures/rails6_users_app/features/support/steps.rb
512
530
  - spec/fixtures/rails6_users_app/lib/tasks/.keep
531
+ - spec/fixtures/rails6_users_app/lib/tasks/appmap.rake
513
532
  - spec/fixtures/rails6_users_app/log/.keep
514
533
  - spec/fixtures/rails6_users_app/public/robots.txt
515
534
  - spec/fixtures/rails6_users_app/spec/controllers/users_controller_api_spec.rb
@@ -527,8 +546,9 @@ files:
527
546
  - spec/record_sql_rails_pg_spec.rb
528
547
  - spec/remote_recording_spec.rb
529
548
  - spec/spec_helper.rb
549
+ - spec/swagger/swagger_spec.rb
530
550
  - spec/util_spec.rb
531
- - test/agent_setup_cli_test.rb
551
+ - test/agent_setup_init_test.rb
532
552
  - test/bundle_vendor_test.rb
533
553
  - test/cucumber_test.rb
534
554
  - test/expectations/openssl_test_key_sign1.json
@@ -1,47 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require 'gli'
5
-
6
- require 'appmap'
7
-
8
- class App
9
- extend GLI::App
10
-
11
- program_desc 'CLI tool to be used by code editor plugins for AppMap setup and configuration'
12
-
13
- version AppMap::VERSION
14
-
15
- subcommand_option_handling :normal
16
- arguments :strict
17
- preserve_argv true
18
-
19
- desc 'AppMap configuration file name'
20
- default_value ENV['APPMAP_CONFIG'] || AppMap::DEFAULT_CONFIG_FILE_PATH
21
- arg_name 'filename'
22
- flag %i[c config]
23
-
24
- desc 'Creates base configuration file for the current project'
25
- command :init do |c|
26
- c.action do
27
- require 'appmap/command/agent_setup/init'
28
- AppMap::Command::AgentSetup::Init.new(@config_file).perform
29
- end
30
- end
31
-
32
- pre do |global, _, _, _|
33
- @config_file = global[:config]
34
- @config = interpret_config_option(@config_file) if File.exist?(@config_file)
35
- true
36
- end
37
-
38
- class << self
39
- protected
40
-
41
- def interpret_config_option(fname)
42
- AppMap::Config.load_from_file fname
43
- end
44
- end
45
- end
46
-
47
- exit App.run(ARGV)