appmap 0.31.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.dockerignore +5 -0
- data/.gitignore +17 -0
- data/.rubocop.yml +27 -0
- data/.ruby-version +1 -0
- data/.travis.yml +44 -0
- data/CHANGELOG.md +199 -0
- data/Dockerfile.appmap +5 -0
- data/Gemfile +5 -0
- data/LICENSE.txt +21 -0
- data/README.md +300 -0
- data/Rakefile +132 -0
- data/appmap.gemspec +44 -0
- data/appmap.yml +8 -0
- data/examples/install.rb +76 -0
- data/examples/mock_webapp/Gemfile +1 -0
- data/examples/mock_webapp/appmap.yml +2 -0
- data/examples/mock_webapp/exe/mock_webapp_request +12 -0
- data/examples/mock_webapp/lib/mock_webapp/controller.rb +23 -0
- data/examples/mock_webapp/lib/mock_webapp/request.rb +12 -0
- data/examples/mock_webapp/lib/mock_webapp/user.rb +18 -0
- data/exe/appmap +154 -0
- data/lib/appmap.rb +87 -0
- data/lib/appmap/algorithm/prune_class_map.rb +67 -0
- data/lib/appmap/algorithm/stats.rb +91 -0
- data/lib/appmap/class_map.rb +135 -0
- data/lib/appmap/command/record.rb +38 -0
- data/lib/appmap/command/stats.rb +14 -0
- data/lib/appmap/config.rb +91 -0
- data/lib/appmap/cucumber.rb +89 -0
- data/lib/appmap/event.rb +168 -0
- data/lib/appmap/hook.rb +130 -0
- data/lib/appmap/metadata.rb +62 -0
- data/lib/appmap/middleware/remote_recording.rb +114 -0
- data/lib/appmap/minitest.rb +141 -0
- data/lib/appmap/rails/action_handler.rb +91 -0
- data/lib/appmap/rails/sql_handler.rb +145 -0
- data/lib/appmap/railtie.rb +45 -0
- data/lib/appmap/record.rb +27 -0
- data/lib/appmap/rspec.rb +301 -0
- data/lib/appmap/trace.rb +96 -0
- data/lib/appmap/util.rb +40 -0
- data/lib/appmap/version.rb +9 -0
- data/lore/pages/2019-05-21-install-and-record/index.pug +51 -0
- data/lore/pages/2019-05-21-install-and-record/install_example_appmap.png +0 -0
- data/lore/pages/2019-05-21-install-and-record/metadata.yml +5 -0
- data/lore/pages/layout.pug +66 -0
- data/lore/public/lib/bootstrap-4.1.3/css/bootstrap-grid.css +1912 -0
- data/lore/public/lib/bootstrap-4.1.3/css/bootstrap-grid.css.map +1 -0
- data/lore/public/lib/bootstrap-4.1.3/css/bootstrap-grid.min.css +7 -0
- data/lore/public/lib/bootstrap-4.1.3/css/bootstrap-grid.min.css.map +1 -0
- data/lore/public/lib/bootstrap-4.1.3/css/bootstrap-reboot.css +331 -0
- data/lore/public/lib/bootstrap-4.1.3/css/bootstrap-reboot.css.map +1 -0
- data/lore/public/lib/bootstrap-4.1.3/css/bootstrap-reboot.min.css +8 -0
- data/lore/public/lib/bootstrap-4.1.3/css/bootstrap-reboot.min.css.map +1 -0
- data/lore/public/lib/bootstrap-4.1.3/css/bootstrap.css +9030 -0
- data/lore/public/lib/bootstrap-4.1.3/css/bootstrap.css.map +1 -0
- data/lore/public/lib/bootstrap-4.1.3/css/bootstrap.min.css +7 -0
- data/lore/public/lib/bootstrap-4.1.3/css/bootstrap.min.css.map +1 -0
- data/lore/public/stylesheets/style.css +8 -0
- data/package-lock.json +1064 -0
- data/package.json +24 -0
- data/spec/abstract_controller4_base_spec.rb +67 -0
- data/spec/abstract_controller_base_spec.rb +72 -0
- data/spec/config_spec.rb +25 -0
- data/spec/fixtures/hook/attr_accessor.rb +5 -0
- data/spec/fixtures/hook/compare.rb +7 -0
- data/spec/fixtures/hook/constructor.rb +7 -0
- data/spec/fixtures/hook/exception_method.rb +11 -0
- data/spec/fixtures/hook/instance_method.rb +23 -0
- data/spec/fixtures/hook/openssl_sign.rb +87 -0
- data/spec/fixtures/hook/singleton_method.rb +54 -0
- data/spec/fixtures/rack_users_app/.dockerignore +2 -0
- data/spec/fixtures/rack_users_app/.gitignore +2 -0
- data/spec/fixtures/rack_users_app/Dockerfile +32 -0
- data/spec/fixtures/rack_users_app/Gemfile +10 -0
- data/spec/fixtures/rack_users_app/appmap.yml +3 -0
- data/spec/fixtures/rack_users_app/config.ru +2 -0
- data/spec/fixtures/rack_users_app/docker-compose.yml +9 -0
- data/spec/fixtures/rack_users_app/lib/app.rb +36 -0
- data/spec/fixtures/rails4_users_app/.gitignore +13 -0
- data/spec/fixtures/rails4_users_app/.rbenv-gemsets +2 -0
- data/spec/fixtures/rails4_users_app/.ruby-version +1 -0
- data/spec/fixtures/rails4_users_app/Dockerfile +30 -0
- data/spec/fixtures/rails4_users_app/Dockerfile.pg +3 -0
- data/spec/fixtures/rails4_users_app/Gemfile +77 -0
- data/spec/fixtures/rails4_users_app/README.rdoc +28 -0
- data/spec/fixtures/rails4_users_app/Rakefile +6 -0
- data/spec/fixtures/rails4_users_app/app/assets/images/.keep +0 -0
- data/spec/fixtures/rails4_users_app/app/assets/javascripts/application.js +16 -0
- data/spec/fixtures/rails4_users_app/app/assets/stylesheets/application.css +15 -0
- data/spec/fixtures/rails4_users_app/app/controllers/api/users_controller.rb +27 -0
- data/spec/fixtures/rails4_users_app/app/controllers/application_controller.rb +5 -0
- data/spec/fixtures/rails4_users_app/app/controllers/concerns/.keep +0 -0
- data/spec/fixtures/rails4_users_app/app/controllers/health_controller.rb +5 -0
- data/spec/fixtures/rails4_users_app/app/controllers/users_controller.rb +5 -0
- data/spec/fixtures/rails4_users_app/app/helpers/application_helper.rb +2 -0
- data/spec/fixtures/rails4_users_app/app/mailers/.keep +0 -0
- data/spec/fixtures/rails4_users_app/app/models/.keep +0 -0
- data/spec/fixtures/rails4_users_app/app/models/concerns/.keep +0 -0
- data/spec/fixtures/rails4_users_app/app/models/user.rb +18 -0
- data/spec/fixtures/rails4_users_app/app/views/layouts/application.html.haml +7 -0
- data/spec/fixtures/rails4_users_app/app/views/users/index.html.haml +7 -0
- data/spec/fixtures/rails4_users_app/appmap.yml +3 -0
- data/spec/fixtures/rails4_users_app/bin/rails +9 -0
- data/spec/fixtures/rails4_users_app/bin/setup +29 -0
- data/spec/fixtures/rails4_users_app/bin/spring +17 -0
- data/spec/fixtures/rails4_users_app/config.ru +4 -0
- data/spec/fixtures/rails4_users_app/config/application.rb +26 -0
- data/spec/fixtures/rails4_users_app/config/boot.rb +3 -0
- data/spec/fixtures/rails4_users_app/config/database.yml +18 -0
- data/spec/fixtures/rails4_users_app/config/environment.rb +5 -0
- data/spec/fixtures/rails4_users_app/config/environments/development.rb +41 -0
- data/spec/fixtures/rails4_users_app/config/environments/production.rb +79 -0
- data/spec/fixtures/rails4_users_app/config/environments/test.rb +42 -0
- data/spec/fixtures/rails4_users_app/config/initializers/assets.rb +11 -0
- data/spec/fixtures/rails4_users_app/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/fixtures/rails4_users_app/config/initializers/cookies_serializer.rb +3 -0
- data/spec/fixtures/rails4_users_app/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/fixtures/rails4_users_app/config/initializers/inflections.rb +16 -0
- data/spec/fixtures/rails4_users_app/config/initializers/mime_types.rb +4 -0
- data/spec/fixtures/rails4_users_app/config/initializers/session_store.rb +3 -0
- data/spec/fixtures/rails4_users_app/config/initializers/to_time_preserves_timezone.rb +10 -0
- data/spec/fixtures/rails4_users_app/config/initializers/wrap_parameters.rb +14 -0
- data/spec/fixtures/rails4_users_app/config/locales/en.yml +23 -0
- data/spec/fixtures/rails4_users_app/config/routes.rb +12 -0
- data/spec/fixtures/rails4_users_app/config/secrets.yml +22 -0
- data/spec/fixtures/rails4_users_app/create_app +23 -0
- data/spec/fixtures/rails4_users_app/db/migrate/20191127112304_create_users.rb +10 -0
- data/spec/fixtures/rails4_users_app/db/schema.rb +26 -0
- data/spec/fixtures/rails4_users_app/db/seeds.rb +7 -0
- data/spec/fixtures/rails4_users_app/docker-compose.yml +26 -0
- data/spec/fixtures/rails4_users_app/lib/assets/.keep +0 -0
- data/spec/fixtures/rails4_users_app/lib/tasks/.keep +0 -0
- data/spec/fixtures/rails4_users_app/log/.keep +0 -0
- data/spec/fixtures/rails4_users_app/public/404.html +67 -0
- data/spec/fixtures/rails4_users_app/public/422.html +67 -0
- data/spec/fixtures/rails4_users_app/public/500.html +66 -0
- data/spec/fixtures/rails4_users_app/public/favicon.ico +0 -0
- data/spec/fixtures/rails4_users_app/public/robots.txt +5 -0
- data/spec/fixtures/rails4_users_app/spec/controllers/users_controller_api_spec.rb +49 -0
- data/spec/fixtures/rails4_users_app/spec/rails_helper.rb +95 -0
- data/spec/fixtures/rails4_users_app/spec/spec_helper.rb +96 -0
- data/spec/fixtures/rails4_users_app/test/fixtures/users.yml +9 -0
- data/spec/fixtures/rails_users_app/.dockerignore +1 -0
- data/spec/fixtures/rails_users_app/.gitignore +39 -0
- data/spec/fixtures/rails_users_app/.rspec +1 -0
- data/spec/fixtures/rails_users_app/.ruby-version +1 -0
- data/spec/fixtures/rails_users_app/Dockerfile +29 -0
- data/spec/fixtures/rails_users_app/Dockerfile.pg +3 -0
- data/spec/fixtures/rails_users_app/Gemfile +52 -0
- data/spec/fixtures/rails_users_app/Rakefile +6 -0
- data/spec/fixtures/rails_users_app/app/controllers/api/users_controller.rb +27 -0
- data/spec/fixtures/rails_users_app/app/controllers/application_controller.rb +2 -0
- data/spec/fixtures/rails_users_app/app/controllers/concerns/.keep +0 -0
- data/spec/fixtures/rails_users_app/app/controllers/health_controller.rb +5 -0
- data/spec/fixtures/rails_users_app/app/controllers/users_controller.rb +5 -0
- data/spec/fixtures/rails_users_app/app/models/activerecord/user.rb +18 -0
- data/spec/fixtures/rails_users_app/app/models/concerns/.keep +0 -0
- data/spec/fixtures/rails_users_app/app/models/sequel/user.rb +25 -0
- data/spec/fixtures/rails_users_app/app/views/layouts/application.html.haml +7 -0
- data/spec/fixtures/rails_users_app/app/views/users/index.html.haml +7 -0
- data/spec/fixtures/rails_users_app/appmap.yml +3 -0
- data/spec/fixtures/rails_users_app/bin/appmap +29 -0
- data/spec/fixtures/rails_users_app/bin/byebug +29 -0
- data/spec/fixtures/rails_users_app/bin/gli +29 -0
- data/spec/fixtures/rails_users_app/bin/htmldiff +29 -0
- data/spec/fixtures/rails_users_app/bin/ldiff +29 -0
- data/spec/fixtures/rails_users_app/bin/nokogiri +29 -0
- data/spec/fixtures/rails_users_app/bin/rackup +29 -0
- data/spec/fixtures/rails_users_app/bin/rails +4 -0
- data/spec/fixtures/rails_users_app/bin/rake +29 -0
- data/spec/fixtures/rails_users_app/bin/rspec +29 -0
- data/spec/fixtures/rails_users_app/bin/ruby-parse +29 -0
- data/spec/fixtures/rails_users_app/bin/ruby-rewrite +29 -0
- data/spec/fixtures/rails_users_app/bin/sequel +29 -0
- data/spec/fixtures/rails_users_app/bin/setup +25 -0
- data/spec/fixtures/rails_users_app/bin/sprockets +29 -0
- data/spec/fixtures/rails_users_app/bin/thor +29 -0
- data/spec/fixtures/rails_users_app/bin/update +25 -0
- data/spec/fixtures/rails_users_app/config.ru +5 -0
- data/spec/fixtures/rails_users_app/config/application.rb +51 -0
- data/spec/fixtures/rails_users_app/config/boot.rb +3 -0
- data/spec/fixtures/rails_users_app/config/credentials.yml.enc +1 -0
- data/spec/fixtures/rails_users_app/config/database.yml +18 -0
- data/spec/fixtures/rails_users_app/config/environment.rb +5 -0
- data/spec/fixtures/rails_users_app/config/environments/development.rb +40 -0
- data/spec/fixtures/rails_users_app/config/environments/production.rb +68 -0
- data/spec/fixtures/rails_users_app/config/environments/test.rb +36 -0
- data/spec/fixtures/rails_users_app/config/initializers/application_controller_renderer.rb +8 -0
- data/spec/fixtures/rails_users_app/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/fixtures/rails_users_app/config/initializers/cors.rb +16 -0
- data/spec/fixtures/rails_users_app/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/fixtures/rails_users_app/config/initializers/inflections.rb +16 -0
- data/spec/fixtures/rails_users_app/config/initializers/mime_types.rb +4 -0
- data/spec/fixtures/rails_users_app/config/initializers/record_button.rb +3 -0
- data/spec/fixtures/rails_users_app/config/initializers/wrap_parameters.rb +9 -0
- data/spec/fixtures/rails_users_app/config/locales/en.yml +33 -0
- data/spec/fixtures/rails_users_app/config/routes.rb +11 -0
- data/spec/fixtures/rails_users_app/create_app +27 -0
- data/spec/fixtures/rails_users_app/db/migrate/20190728211408_create_users.rb +9 -0
- data/spec/fixtures/rails_users_app/db/schema.rb +23 -0
- data/spec/fixtures/rails_users_app/docker-compose.yml +28 -0
- data/spec/fixtures/rails_users_app/features/api_users.feature +13 -0
- data/spec/fixtures/rails_users_app/features/support/env.rb +4 -0
- data/spec/fixtures/rails_users_app/features/support/hooks.rb +11 -0
- data/spec/fixtures/rails_users_app/features/support/steps.rb +18 -0
- data/spec/fixtures/rails_users_app/lib/tasks/.keep +0 -0
- data/spec/fixtures/rails_users_app/log/.keep +0 -0
- data/spec/fixtures/rails_users_app/public/robots.txt +1 -0
- data/spec/fixtures/rails_users_app/spec/controllers/users_controller_api_spec.rb +29 -0
- data/spec/fixtures/rails_users_app/spec/models/user_spec.rb +39 -0
- data/spec/fixtures/rails_users_app/spec/rails_helper.rb +66 -0
- data/spec/fixtures/rails_users_app/spec/spec_helper.rb +96 -0
- data/spec/fixtures/rails_users_app/users_app/.gitignore +20 -0
- data/spec/hook_spec.rb +576 -0
- data/spec/rails_spec_helper.rb +60 -0
- data/spec/railtie_spec.rb +44 -0
- data/spec/record_sql_rails4_pg_spec.rb +76 -0
- data/spec/record_sql_rails_pg_spec.rb +68 -0
- data/spec/remote_recording_spec.rb +117 -0
- data/spec/rspec_feature_metadata_spec.rb +32 -0
- data/spec/spec_helper.rb +15 -0
- data/spec/util_spec.rb +21 -0
- data/test/cli_test.rb +116 -0
- data/test/cucumber_test.rb +72 -0
- data/test/fixtures/cli_record_test/appmap.yml +3 -0
- data/test/fixtures/cli_record_test/lib/cli_record_test/main.rb +9 -0
- data/test/fixtures/cucumber4_recorder/Gemfile +5 -0
- data/test/fixtures/cucumber4_recorder/appmap.yml +3 -0
- data/test/fixtures/cucumber4_recorder/features/say_hello.feature +5 -0
- data/test/fixtures/cucumber4_recorder/features/support/env.rb +5 -0
- data/test/fixtures/cucumber4_recorder/features/support/hooks.rb +11 -0
- data/test/fixtures/cucumber4_recorder/features/support/steps.rb +9 -0
- data/test/fixtures/cucumber4_recorder/lib/hello.rb +7 -0
- data/test/fixtures/cucumber_recorder/Gemfile +5 -0
- data/test/fixtures/cucumber_recorder/appmap.yml +3 -0
- data/test/fixtures/cucumber_recorder/features/say_hello.feature +5 -0
- data/test/fixtures/cucumber_recorder/features/support/env.rb +5 -0
- data/test/fixtures/cucumber_recorder/features/support/hooks.rb +11 -0
- data/test/fixtures/cucumber_recorder/features/support/steps.rb +9 -0
- data/test/fixtures/cucumber_recorder/lib/hello.rb +7 -0
- data/test/fixtures/minitest_recorder/Gemfile +5 -0
- data/test/fixtures/minitest_recorder/appmap.yml +3 -0
- data/test/fixtures/minitest_recorder/lib/hello.rb +5 -0
- data/test/fixtures/minitest_recorder/test/hello_test.rb +12 -0
- data/test/fixtures/process_recorder/appmap.yml +3 -0
- data/test/fixtures/process_recorder/hello.rb +9 -0
- data/test/fixtures/rspec_recorder/Gemfile +5 -0
- data/test/fixtures/rspec_recorder/appmap.yml +3 -0
- data/test/fixtures/rspec_recorder/lib/hello.rb +5 -0
- data/test/fixtures/rspec_recorder/spec/decorated_hello_spec.rb +21 -0
- data/test/fixtures/rspec_recorder/spec/labeled_hello_spec.rb +9 -0
- data/test/fixtures/rspec_recorder/spec/plain_hello_spec.rb +9 -0
- data/test/minitest_test.rb +38 -0
- data/test/record_process_test.rb +35 -0
- data/test/rspec_test.rb +82 -0
- data/test/test_helper.rb +4 -0
- metadata +525 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 54b9a05aeb3eea84572b115a6de1106e6743b74046048e3c168f99a75aa9e669
|
4
|
+
data.tar.gz: eb8a690376d833c4bec9f0789c5499f413f7dcb3b1ef111257785bd344861f64
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 453f06041220ecd0a4fc563ae007e7f8247d3dfcccf49657cbf47ddc53d0175e6834d1dbd89a2338a032d6cfae866929216b58a11bb6f0fe3fd2ea69508d7b2a
|
7
|
+
data.tar.gz: 77f372ad255c3c664c690affa2962958cebd1e8f34579809e4d975fdf57404889d8506f9153d44a95afda297ffe7b1654529252a5293487477e803bdf0cc9608
|
data/.dockerignore
ADDED
data/.gitignore
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
Layout/SpaceInsideArrayLiteralBrackets:
|
2
|
+
Enabled: false
|
3
|
+
|
4
|
+
# We have squiggly heredocs
|
5
|
+
Layout/HeredocIndentation:
|
6
|
+
Enabled: false
|
7
|
+
|
8
|
+
Layout/LineLength:
|
9
|
+
Max: 120
|
10
|
+
|
11
|
+
Style/MultilineBlockChain:
|
12
|
+
Enabled: false
|
13
|
+
|
14
|
+
Style/NumericPredicate:
|
15
|
+
Enabled: false
|
16
|
+
|
17
|
+
Style/AndOr:
|
18
|
+
Enabled: false
|
19
|
+
|
20
|
+
Style/HashEachMethods:
|
21
|
+
Enabled: true
|
22
|
+
|
23
|
+
Style/HashTransformKeys:
|
24
|
+
Enabled: true
|
25
|
+
|
26
|
+
Style/HashTransformValues:
|
27
|
+
Enabled: true
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.6.2
|
data/.travis.yml
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
language: ruby
|
2
|
+
|
3
|
+
addons:
|
4
|
+
apt:
|
5
|
+
packages:
|
6
|
+
# https://docs.travis-ci.com/user/docker/#installing-a-newer-docker-version
|
7
|
+
- docker-ce
|
8
|
+
|
9
|
+
services:
|
10
|
+
- docker
|
11
|
+
|
12
|
+
# We expect RAILS_ENV to start off unset, then adjust its value as
|
13
|
+
# necessary.
|
14
|
+
before_script:
|
15
|
+
- unset RAILS_ENV
|
16
|
+
|
17
|
+
jobs:
|
18
|
+
include:
|
19
|
+
- stage: minitest
|
20
|
+
script:
|
21
|
+
- mkdir tmp
|
22
|
+
- bundle exec rake minitest
|
23
|
+
|
24
|
+
- stage: base
|
25
|
+
script:
|
26
|
+
- bundle exec rake build:base:2.5
|
27
|
+
- stage: base
|
28
|
+
script:
|
29
|
+
- bundle exec rake build:base:2.6
|
30
|
+
|
31
|
+
- stage: fixtures
|
32
|
+
script:
|
33
|
+
- bundle exec rake build:fixtures:2.5:all
|
34
|
+
- stage: fixtures
|
35
|
+
script:
|
36
|
+
- bundle exec rake build:fixtures:2.6:all
|
37
|
+
|
38
|
+
- stage: spec
|
39
|
+
script:
|
40
|
+
- bundle exec rake spec:2.5
|
41
|
+
- stage: spec
|
42
|
+
script:
|
43
|
+
- bundle exec rake spec:2.6
|
44
|
+
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,199 @@
|
|
1
|
+
# v0.31.0
|
2
|
+
|
3
|
+
* Add the ability to hook methods by default, and optionally add labels to them in the
|
4
|
+
classmap. Use it to hook `ActiveSupport::SecurityUtils.secure_compare`.
|
5
|
+
|
6
|
+
# v0.30.0
|
7
|
+
|
8
|
+
* Add support for Minitest.
|
9
|
+
|
10
|
+
# v0.29.0
|
11
|
+
|
12
|
+
* Add `lib/appmap/record.rb`, which can be `require`d to record the rest of the process.
|
13
|
+
|
14
|
+
# v0.28.1
|
15
|
+
|
16
|
+
* Fix the `defined_class` recorded in an appmap for an instance method included in a class
|
17
|
+
at runtime.
|
18
|
+
* Only include the `static` attribute on `call` events in an appmap. Determine its value
|
19
|
+
based on the receiver of the method call.
|
20
|
+
|
21
|
+
# v0.28.0
|
22
|
+
|
23
|
+
* Change behavior of **AppMap.record** to return a complete AppMap as a Hash.
|
24
|
+
* Update README with information about recording Cucumber tests.
|
25
|
+
* **AppMap.initialize** automatically runs when `AppMap` is required, unless disabled
|
26
|
+
by environment variable `APPMAP_INITIALIZE=false`.
|
27
|
+
* **AppMap.hook** no longer takes a `configuration` argument.
|
28
|
+
* Add **AppMap::Util.scenario_filename**.
|
29
|
+
|
30
|
+
# v0.27.0
|
31
|
+
|
32
|
+
* Add **AppMap.record** to programatically record and capture an AppMap of a Ruby block.
|
33
|
+
|
34
|
+
# v0.26.1
|
35
|
+
|
36
|
+
* Fix a bug that caused duplicate entries in the list of frameworks that appear
|
37
|
+
in the `metadata` section of an appmap.
|
38
|
+
|
39
|
+
# v0.26.0
|
40
|
+
|
41
|
+
* **appmap upload** is removed. Upload functionality has been moved to
|
42
|
+
the [AppLand CLI](https://github.com/applandinc/appland-cli).
|
43
|
+
|
44
|
+
# v0.25.2
|
45
|
+
|
46
|
+
* Stop checking a whitelist to see if each SQL query should be recorded. Record
|
47
|
+
all queries.
|
48
|
+
|
49
|
+
# v0.25.1
|
50
|
+
|
51
|
+
* Ensure that caught exceptions are re-raised.
|
52
|
+
* Add safety around indexing potentially nil backtrace locations.
|
53
|
+
|
54
|
+
# v0.25.0
|
55
|
+
|
56
|
+
* Reports `exceptions` in [function return attributes](https://github.com/applandinc/appmap#function-return-attributes).
|
57
|
+
|
58
|
+
# v0.24.1
|
59
|
+
* Fixes an issue which prevented a remote recording from returning scenario data successfully.
|
60
|
+
* Remote recording routes now return descriptive status codes as intended.
|
61
|
+
* Remote recording routes now have the correct `Content-Type` header.
|
62
|
+
|
63
|
+
# v0.24.0
|
64
|
+
|
65
|
+
Internals of `appmap-ruby` have been changed to record each method event using `alias_method`,
|
66
|
+
rather than `TracePoint`. Performance is much better as a result.
|
67
|
+
|
68
|
+
**WARNING** Breaking changes
|
69
|
+
|
70
|
+
* **Rack** apps no longer generate `http_server_request` events.
|
71
|
+
* **appmap inspect** has been removed. `appmap-ruby` no longer parses the source tree. Instead, it observes the methods as they are loaded by the VM. So, to get a class map, you have to create a recording. The `RSpec` recorder still prints an inventory to `Inventory.appmap.json` when it exits. The class map in this file contains every class and method which was loaded by any of the tests.
|
72
|
+
|
73
|
+
# v0.23.0
|
74
|
+
|
75
|
+
* **appmap stats** command added.
|
76
|
+
|
77
|
+
# v0.22.0
|
78
|
+
|
79
|
+
* **RSpec** recorder generates an "inventory" (AppMap with classMap, without events) named `Inventory.appmap.json`.
|
80
|
+
* **appmap inspect** generates an inventory AppMap which includes `version`, `metadata`, and `classMap`. Previously, the file output by this command was the class map represented as an array.
|
81
|
+
|
82
|
+
# v0.21.0
|
83
|
+
|
84
|
+
* Scenario data includes `recorder` and `client` info, describing how the data was recorded.
|
85
|
+
|
86
|
+
# v0.20.0
|
87
|
+
|
88
|
+
Updated to [AppMap file format](https://github.com/applandinc/appmap) version 1.2.
|
89
|
+
|
90
|
+
* **Event `message`** is now an array of parameter objects.
|
91
|
+
* The value of each `appmap:` tags in an RSpec is recorded as a `label` in the AppMap file metadata.
|
92
|
+
* `layout` is removed from AppMap file metadata.
|
93
|
+
|
94
|
+
# v0.19.0
|
95
|
+
|
96
|
+
* **RSpec** feature and feature group names can be inferred from example group and example names.
|
97
|
+
* Stop using `ActiveSupport::Inflector.transliterate`, since it can cause exceptions.
|
98
|
+
* Handle StandardError which occurs while calling `#inspect` of an object.
|
99
|
+
|
100
|
+
# v0.18.1
|
101
|
+
|
102
|
+
* Now tested with Rails 4, 5, and 6.
|
103
|
+
* Now tested with Ruby 2.5 and 2.6.
|
104
|
+
* `explain_sql` is no longer collected.
|
105
|
+
* `appmap/railtie` is automatically required when running in a Rails environment.
|
106
|
+
|
107
|
+
# v0.17.0
|
108
|
+
|
109
|
+
**WARNING** Breaking changes
|
110
|
+
|
111
|
+
* **appmap upload** expects arguments `user` and `org`.
|
112
|
+
* **appmap upload** receives and retransmits the scenario batch id
|
113
|
+
* assigned by the server.
|
114
|
+
|
115
|
+
# v0.16.0
|
116
|
+
|
117
|
+
**WARNING** Breaking changes
|
118
|
+
|
119
|
+
* **Record button** removed. Frontend interactions are now recorded with a browser extension.
|
120
|
+
As a result, `AppMap::Middleware::RecordButton` has been renamed to
|
121
|
+
`AppMap::Middleware::RemoteRecording`
|
122
|
+
|
123
|
+
# v0.15.1
|
124
|
+
|
125
|
+
* **Record button** moved to the bottom of the window.
|
126
|
+
|
127
|
+
# v0.15.0
|
128
|
+
|
129
|
+
**WARNING** Breaking changes
|
130
|
+
|
131
|
+
* **AppMap version** updated to 1.1
|
132
|
+
* **Event `parameters`** are reported as an array rather than a map, so that parameter order is preserved.
|
133
|
+
* **Event `receiver`** reports the `receiver/this/self` parameter of each method call.
|
134
|
+
|
135
|
+
# v0.14.1
|
136
|
+
|
137
|
+
* **RSpec recorder** won't try to modify a frozen string.
|
138
|
+
|
139
|
+
# v0.14.0
|
140
|
+
|
141
|
+
* **SQL queries** are reported for SQLite.
|
142
|
+
|
143
|
+
# v0.13.0
|
144
|
+
|
145
|
+
* **SQL queries** are reported for ActiveRecord.
|
146
|
+
|
147
|
+
# v0.12.0
|
148
|
+
|
149
|
+
* **Record button** integrates into any HTML UI and provides a button to record and upload AppMaps.
|
150
|
+
|
151
|
+
# v0.11.0
|
152
|
+
|
153
|
+
* Information about `language` and `frameworks` is provided in the AppMap `metadata`.
|
154
|
+
|
155
|
+
# v0.10.0
|
156
|
+
|
157
|
+
* **`AppMap::Algorithm::PruneClassMap`** prunes a class map so that only functions, classes and packages which are
|
158
|
+
referenced by some event are retained.
|
159
|
+
|
160
|
+
# v0.9.0
|
161
|
+
|
162
|
+
* **`appmap/rspec`** only records trace events which happen during an example block. `before` and `after` events are
|
163
|
+
excluded from the AppMap.
|
164
|
+
* **`appmap/rspec`** exports `feature` and `feature_group` attributes to the AppMap `metadata`
|
165
|
+
section.
|
166
|
+
|
167
|
+
# v0.8.0
|
168
|
+
|
169
|
+
* **`appmap upload`** accepts multiple arguments, to upload multiple files in one command.
|
170
|
+
|
171
|
+
# v0.7.0
|
172
|
+
|
173
|
+
* **`appmap/railtie`** is provided to integrate AppMap recording into Rails apps.
|
174
|
+
* Use `gem :appmap, require: %w[appmap appmap/railtie]` to activate.
|
175
|
+
* Set Rails configuration setting `config.appmap.enabled = true` to enable recording of the app via the Railtie, and
|
176
|
+
to enable recording of RSpec tests via `appmap/rspec`.
|
177
|
+
* In a non-Rails environment, set `APPMAP=true` to to enable recording of RSpec tests.
|
178
|
+
* **SQL queries** are reported as AppMap event `sql_query` data.
|
179
|
+
* **`self` attribute** is removed from `call` events.
|
180
|
+
|
181
|
+
# v0.6.0
|
182
|
+
|
183
|
+
* **Web server requests and responses** through WEBrick are reported as AppMap event `http_server_request` data.
|
184
|
+
* **Rails `params` hash** is reported as an AppMap event `message` data.
|
185
|
+
* **Rails `request`** is reported as an AppMap event `http_server_request` data.
|
186
|
+
|
187
|
+
# v0.5.1
|
188
|
+
|
189
|
+
* **RSpec** test recorder is added.
|
190
|
+
|
191
|
+
# v0.5.0
|
192
|
+
|
193
|
+
* **'inspect', 'record' and 'upload' commands** are converted into a unified 'appmap' command with subcommands.
|
194
|
+
* **Config file name** is changed from .appmap.yml to appmap.yml.
|
195
|
+
* **`appmap.yml`** configuration format is updated.
|
196
|
+
|
197
|
+
# v0.4.0
|
198
|
+
|
199
|
+
Initial release.
|
data/Dockerfile.appmap
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2018 Kevin Gilpin
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,300 @@
|
|
1
|
+
- [About](#about)
|
2
|
+
- [Installation](#installation)
|
3
|
+
- [Configuration](#configuration)
|
4
|
+
- [Running](#running)
|
5
|
+
- [RSpec](#rspec)
|
6
|
+
- [Minitest](#minitest)
|
7
|
+
- [Cucumber](#cucumber)
|
8
|
+
- [Remote recording](#remote-recording)
|
9
|
+
- [Ruby on Rails](#ruby-on-rails)
|
10
|
+
- [Uploading AppMaps](#uploading-appmaps)
|
11
|
+
- [Development](#development)
|
12
|
+
- [Running tests](#running-tests)
|
13
|
+
- [Using fixture apps](#using-fixture-apps)
|
14
|
+
- [`test/fixtures`](#testfixtures)
|
15
|
+
- [`spec/fixtures`](#specfixtures)
|
16
|
+
- [Build status](#build-status)
|
17
|
+
|
18
|
+
# About
|
19
|
+
|
20
|
+
`appmap-ruby` is a Ruby Gem for recording
|
21
|
+
[AppMaps](https://github.com/applandinc/appmap) of your code.
|
22
|
+
"AppMap" is a data format which records code structure (modules, classes, and methods), code execution events
|
23
|
+
(function calls and returns), and code metadata (repo name, repo URL, commit
|
24
|
+
SHA, labels, etc). It's more granular than a performance profile, but it's less
|
25
|
+
granular than a full debug trace. It's designed to be optimal for understanding the design intent and behavior of code.
|
26
|
+
|
27
|
+
There are several ways to record AppMaps of your Ruby program using the `appmap` gem:
|
28
|
+
|
29
|
+
* Run your RSpec tests with the environment variable `APPMAP=true`. An AppMap will be generated for each spec.
|
30
|
+
* Run your application server with AppMap remote recording enabled, and use the AppMap.
|
31
|
+
browser extension to start, stop, and upload recordings.
|
32
|
+
* Run the command `appmap record <program>` to record the entire execution of a program.
|
33
|
+
|
34
|
+
Once you have recorded some AppMaps (for example, by running RSpec tests), you use the `appland upload` command
|
35
|
+
to upload them to the AppLand server. This command, and some others, is provided
|
36
|
+
by the [AppLand CLI](https://github.com/applandinc/appland-cli/releases), to
|
37
|
+
Then, on the [AppLand website](https://app.land), you can
|
38
|
+
visualize the design of your code and share links with collaborators.
|
39
|
+
|
40
|
+
# Installation
|
41
|
+
|
42
|
+
Add `gem 'appmap'` to your Gemfile just as you would any other dependency.
|
43
|
+
|
44
|
+
**Global installation**
|
45
|
+
|
46
|
+
```
|
47
|
+
gem 'appmap'
|
48
|
+
```
|
49
|
+
|
50
|
+
**Install in test, development groups**
|
51
|
+
|
52
|
+
```
|
53
|
+
group :development, :test do
|
54
|
+
gem 'appmap'
|
55
|
+
end
|
56
|
+
```
|
57
|
+
|
58
|
+
Then install with `bundle`.
|
59
|
+
|
60
|
+
# Configuration
|
61
|
+
|
62
|
+
When you run your program, the `appmap` gem reads configuration settings from `appmap.yml`. Here's a sample configuration
|
63
|
+
file for a typical Rails project:
|
64
|
+
|
65
|
+
```yaml
|
66
|
+
name: MyProject
|
67
|
+
packages:
|
68
|
+
- path: app/controllers
|
69
|
+
- path: app/models
|
70
|
+
```
|
71
|
+
|
72
|
+
* **name** Provides the project name (required)
|
73
|
+
* **packages** A list of source code directories which should be instrumented.
|
74
|
+
|
75
|
+
**packages**
|
76
|
+
|
77
|
+
Each entry in the `packages` list is a YAML object which has the following keys:
|
78
|
+
|
79
|
+
* **path** The path to the source code directory. The path may be relative to the current working directory, or it may
|
80
|
+
be an absolute path.
|
81
|
+
* **exclude** A list of files and directories which will be ignored. By default, all modules, classes and public
|
82
|
+
functions are inspected.
|
83
|
+
|
84
|
+
# Running
|
85
|
+
|
86
|
+
## RSpec
|
87
|
+
|
88
|
+
To record RSpec tests, follow these additional steps:
|
89
|
+
|
90
|
+
1) Require `appmap/rspec` in your `spec_helper.rb`.
|
91
|
+
|
92
|
+
```ruby
|
93
|
+
require 'appmap/rspec'
|
94
|
+
```
|
95
|
+
|
96
|
+
2) *Optional* Add `feature: '<feature name>'` and `feature_group: '<feature group name>'` annotations to your
|
97
|
+
examples.
|
98
|
+
|
99
|
+
3) Run the tests with the environment variable `APPMAP=true`:
|
100
|
+
|
101
|
+
```sh-session
|
102
|
+
$ APPMAP=true bundle exec rspec -t appmap
|
103
|
+
```
|
104
|
+
|
105
|
+
Each RSpec test will output an AppMap file into the directory `tmp/appmap/rspec`. For example:
|
106
|
+
|
107
|
+
```
|
108
|
+
$ find tmp/appmap/rspec
|
109
|
+
Hello_says_hello_when_prompted.appmap.json
|
110
|
+
```
|
111
|
+
|
112
|
+
If you include the `feature` and `feature_group` metadata, these attributes will be exported to the AppMap file in the
|
113
|
+
`metadata` section. It will look something like this:
|
114
|
+
|
115
|
+
```json
|
116
|
+
{
|
117
|
+
...
|
118
|
+
"metadata": {
|
119
|
+
"name": "Hello app says hello when prompted",
|
120
|
+
"feature": "Hello app says hello",
|
121
|
+
"feature_group": "Hello"
|
122
|
+
},
|
123
|
+
...
|
124
|
+
}
|
125
|
+
```
|
126
|
+
|
127
|
+
If you don't explicitly declare `feature` and `feature_group`, then they will be inferred from the spec name and example descriptions.
|
128
|
+
|
129
|
+
## Minitest
|
130
|
+
|
131
|
+
To record Minitest tests, follow these additional steps:
|
132
|
+
|
133
|
+
1) Require `appmap/minitest` in `test_helper.rb`
|
134
|
+
|
135
|
+
```ruby
|
136
|
+
require 'appmap/minitest'
|
137
|
+
```
|
138
|
+
|
139
|
+
2) Run the tests with the environment variable `APPMAP=true`:
|
140
|
+
|
141
|
+
```sh-session
|
142
|
+
$ APPMAP=true bundle exec -Ilib -Itest test/*
|
143
|
+
```
|
144
|
+
|
145
|
+
Each Minitest test will output an AppMap file into the directory `tmp/appmap/minitest`. For example:
|
146
|
+
|
147
|
+
```
|
148
|
+
$ find tmp/appmap/minitest
|
149
|
+
Hello_says_hello_when_prompted.appmap.json
|
150
|
+
```
|
151
|
+
|
152
|
+
## Cucumber
|
153
|
+
|
154
|
+
To record Cucumber tests, follow these additional steps:
|
155
|
+
|
156
|
+
1) Require `appmap/cucumber` in `support/env.rb`:
|
157
|
+
|
158
|
+
```ruby
|
159
|
+
require 'appmap/cucumber'
|
160
|
+
```
|
161
|
+
|
162
|
+
2) Create an `Around` hook in `support/hooks.rb` to record the scenario:
|
163
|
+
|
164
|
+
|
165
|
+
```ruby
|
166
|
+
if AppMap::Cucumber.enabled?
|
167
|
+
Around('not @appmap-disable') do |scenario, block|
|
168
|
+
appmap = AppMap.record do
|
169
|
+
block.call
|
170
|
+
end
|
171
|
+
|
172
|
+
AppMap::Cucumber.write_scenario(scenario, appmap)
|
173
|
+
end
|
174
|
+
end
|
175
|
+
```
|
176
|
+
|
177
|
+
3) Run the tests with the environment variable `APPMAP=true`:
|
178
|
+
|
179
|
+
```sh-session
|
180
|
+
$ APPMAP=true bundle exec cucumber
|
181
|
+
```
|
182
|
+
|
183
|
+
Each Cucumber test will output an AppMap file into the directory `tmp/appmap/cucumber`. For example:
|
184
|
+
|
185
|
+
```
|
186
|
+
$ find tmp/appmap/cucumber
|
187
|
+
Hello_Says_hello_when_prompted.appmap.json
|
188
|
+
```
|
189
|
+
|
190
|
+
## Remote recording
|
191
|
+
|
192
|
+
To manually record ad-hoc AppMaps of your Ruby app, use AppMap remote recording.
|
193
|
+
|
194
|
+
1. Add the AppMap remote recording middleware. For example, in `config/initializers/appmap_remote_recording.rb`:
|
195
|
+
|
196
|
+
```ruby
|
197
|
+
require 'appmap/middleware/remote_recording'
|
198
|
+
|
199
|
+
unless Rails.env.test?
|
200
|
+
Rails.application.config.middleware.insert_after \
|
201
|
+
Rails::Rack::Logger,
|
202
|
+
AppMap::Middleware::RemoteRecording
|
203
|
+
end
|
204
|
+
```
|
205
|
+
|
206
|
+
2. Download and unpack the [AppLand browser extension](https://github.com/applandinc/appland-browser-extension). Install into Chrome using `chrome://extensions/`. Turn on "Developer Mode" and then load the extension using the "Load unpacked" button.
|
207
|
+
|
208
|
+
3. Start your Rails application server. For example:
|
209
|
+
|
210
|
+
```sh-session
|
211
|
+
$ bundle exec rails server
|
212
|
+
```
|
213
|
+
|
214
|
+
4. Open the AppApp browser extension and push `Start`.
|
215
|
+
|
216
|
+
5. Use your app. For example, perform a login flow, or run through a manual UI test.
|
217
|
+
|
218
|
+
6. Open the AppApp browser extension and push `Stop`. The recording will be transferred to the AppLand website and opened in your browser.
|
219
|
+
|
220
|
+
## Ruby on Rails
|
221
|
+
|
222
|
+
If your app uses Ruby on Rails, the AppMap Railtie will be automatically enabled. Set the Rails config flag `app.config.appmap.enabled = true` to record the entire execution of your Rails app.
|
223
|
+
|
224
|
+
Note that using this method is kind of a blunt instrument. Recording RSpecs and using Remote Recording are usually better options.
|
225
|
+
|
226
|
+
# Uploading AppMaps
|
227
|
+
|
228
|
+
For instructions on uploading, see the documentation of the [AppLand CLI](https://github.com/applandinc/appland-cli).
|
229
|
+
|
230
|
+
# Development
|
231
|
+
|
232
|
+
## Running tests
|
233
|
+
|
234
|
+
Before running tests, configure `local.appmap` to point to your local `appmap-ruby` directory.
|
235
|
+
```
|
236
|
+
$ bundle config local.appmap $(pwd)
|
237
|
+
```
|
238
|
+
|
239
|
+
Run the tests via `rake`:
|
240
|
+
```
|
241
|
+
$ bundle exec rake test
|
242
|
+
```
|
243
|
+
|
244
|
+
## Using fixture apps
|
245
|
+
|
246
|
+
### `test/fixtures`
|
247
|
+
|
248
|
+
The fixture apps in `test/fixtures` are plain Ruby projects that exercise the basic functionality of the
|
249
|
+
`appmap` gem. To develop in a fixture, simple enter the fixture directory and `bundle`.
|
250
|
+
|
251
|
+
### `spec/fixtures`
|
252
|
+
|
253
|
+
The fixture apps in `spec/fixtures` are simple Rack, Rails4, and Rails5 apps.
|
254
|
+
You can use them to interactively develop and test the recording features of the `appmap` gem.
|
255
|
+
These fixture apps are more sophisticated than `test/fixtures`, because they include additional
|
256
|
+
resources such as a PostgreSQL database.
|
257
|
+
|
258
|
+
To build the fixture container images, first run:
|
259
|
+
|
260
|
+
```sh-session
|
261
|
+
$ bundle exec rake fixtures:all
|
262
|
+
```
|
263
|
+
|
264
|
+
This will build the `appmap.gem`, along with a Docker image for each fixture app.
|
265
|
+
|
266
|
+
Then move to the directory of the fixture you want to use, and provision the environment.
|
267
|
+
In this example, we use Ruby 2.6.
|
268
|
+
|
269
|
+
```sh-session
|
270
|
+
$ export RUBY_VERSION=2.6
|
271
|
+
$ docker-compose up -d pg
|
272
|
+
$ sleep 10s # Or some reasonable amount of time
|
273
|
+
$ docker-compose run --rm app ./create_app
|
274
|
+
```
|
275
|
+
|
276
|
+
Now you can start a development container.
|
277
|
+
|
278
|
+
```sh-session
|
279
|
+
$ docker-compose run --rm -v $PWD/../../..:/src/appmap-ruby app bash
|
280
|
+
Starting rails_users_app_pg_1 ... done
|
281
|
+
root@6fab5f89125f:/app# cd /src/app
|
282
|
+
root@6fab5f89125f:/src/app# bundle config local.appmap /src/appmap-ruby
|
283
|
+
root@6fab5f89125f:/src/app# bundle update appmap
|
284
|
+
```
|
285
|
+
|
286
|
+
At this point, the bundle is built with the `appmap` gem located in `/src/appmap`, which is volume-mounted from the host.
|
287
|
+
So you can edit the fixture code and the appmap code and run test commands such as `rspec` and `cucumber` in the container.
|
288
|
+
For example:
|
289
|
+
|
290
|
+
```sh-session
|
291
|
+
root@6fab5f89125f:/src/app# bundle exec rspec
|
292
|
+
Configuring AppMap from path appmap.yml
|
293
|
+
....
|
294
|
+
|
295
|
+
Finished in 0.07357 seconds (files took 2.1 seconds to load)
|
296
|
+
4 examples, 0 failures
|
297
|
+
```
|
298
|
+
|
299
|
+
# Build status
|
300
|
+
[![Build Status](https://travis-ci.org/applandinc/appmap-ruby.svg?branch=master)](https://travis-ci.org/applandinc/appmap-ruby)
|