appmap 0.83.6 → 0.86.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +33 -0
- data/appmap.gemspec +2 -1
- data/lib/appmap/agent.rb +6 -0
- data/lib/appmap/{gem_hooks → builtin_hooks}/activesupport.yml +9 -1
- data/lib/appmap/builtin_hooks/net/http.yml +1 -1
- data/lib/appmap/builtin_hooks/openssl.yml +34 -0
- data/lib/appmap/builtin_hooks/ruby.yml +5 -1
- data/lib/appmap/config.rb +3 -3
- data/lib/appmap/event.rb +5 -5
- data/lib/appmap/gem_hooks/actionpack.yml +2 -0
- data/lib/appmap/gem_hooks/random.yml +12 -0
- data/lib/appmap/handler/{eval.rb → eval_handler.rb} +23 -4
- data/lib/appmap/handler/{function.rb → function_handler.rb} +1 -1
- data/lib/appmap/handler/marshal_load_handler.rb +18 -0
- data/lib/appmap/handler/{net_http.rb → net_http_handler.rb} +3 -3
- data/lib/appmap/handler/open_ssl_handler.rb +16 -0
- data/lib/appmap/handler/rails/render_handler.rb +2 -2
- data/lib/appmap/handler/rails/template.rb +2 -2
- data/lib/appmap/hook/method.rb +1 -1
- data/lib/appmap/rspec.rb +8 -2
- data/lib/appmap/util.rb +1 -0
- data/lib/appmap/version.rb +1 -1
- data/lib/appmap.rb +0 -7
- metadata +13 -10
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: aaf2ec3e35b79244511d47a45f8d3f8f85dc5b666b022cbffe07e6224250f4fd
|
|
4
|
+
data.tar.gz: 0eada13772cc55470113fc06c47c5fddac339914a6012eafefc75d350bbb5c81
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 243680c3c2dcf1fe285bf2c2baf4dfe0913b4627bfdcb9654353d4855be3ed3def55973d331ad04ae13a307f710d6eba284313c338f70b8cf5e24025f0e6befe
|
|
7
|
+
data.tar.gz: c5715cb83a9d5463208392918cb040505b3a52be12e13cb40936146e2b468efc9932bd3b1233df7f0a05fece28387282009e6abe71a940858735e31ee18885e9
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,36 @@
|
|
|
1
|
+
# [0.86.0](https://github.com/applandinc/appmap-ruby/compare/v0.85.0...v0.86.0) (2022-08-10)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* Don't record rspec test when appmap: false ([09c4a24](https://github.com/applandinc/appmap-ruby/commit/09c4a249c7446c6aebcc1d462d3d7b35817334fc))
|
|
7
|
+
|
|
8
|
+
# [0.85.0](https://github.com/applandinc/appmap-ruby/compare/v0.84.0...v0.85.0) (2022-08-08)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* Tune method parameters ([4a7b575](https://github.com/applandinc/appmap-ruby/commit/4a7b575e6f9684adaac4b592adc1ad2c832e900d))
|
|
14
|
+
|
|
15
|
+
# [0.84.0](https://github.com/applandinc/appmap-ruby/compare/v0.83.6...v0.84.0) (2022-08-04)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
* Address stack overflow error with tracing? ([f426210](https://github.com/applandinc/appmap-ruby/commit/f426210b8dfb48987f2b6c1b5e57e80e3a2c921d))
|
|
21
|
+
* Handle nil class names ([263f2fc](https://github.com/applandinc/appmap-ruby/commit/263f2fc97b716f1a8205a3e85292c59ee19bc6bc))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
### Features
|
|
25
|
+
|
|
26
|
+
* Label ActiveSupport::MessageEncryptor ([38a7aeb](https://github.com/applandinc/appmap-ruby/commit/38a7aeb446a2baa63f6724eea8dcf36276d336c9))
|
|
27
|
+
* Label crypto function with algorithm name ([a7a9c61](https://github.com/applandinc/appmap-ruby/commit/a7a9c6145790fc5bc425e413d56984ef777f9fd1))
|
|
28
|
+
* Label EncryptedKeyRotatingCookieJar.commit ([8e1d015](https://github.com/applandinc/appmap-ruby/commit/8e1d0158d25f2cc386c32ba899085fd21fadafcb))
|
|
29
|
+
* Label OpenSSL::Random ([5c947a9](https://github.com/applandinc/appmap-ruby/commit/5c947a90037300639a94ab89d9e1a4dca26265bc))
|
|
30
|
+
* Label Random ([7572803](https://github.com/applandinc/appmap-ruby/commit/7572803991693ad80f8526c44056133cca13d4b8))
|
|
31
|
+
* Label the rest of OpenSSL::Cipher ([7863b7b](https://github.com/applandinc/appmap-ruby/commit/7863b7b3fcf2ecccda16b80e637e216c06a95108))
|
|
32
|
+
* Make activesupport a runtime dependency ([140a674](https://github.com/applandinc/appmap-ruby/commit/140a6744be2abf47d01e880a98f1dd06c8a505b1))
|
|
33
|
+
|
|
1
34
|
## [0.83.6](https://github.com/applandinc/appmap-ruby/compare/v0.83.5...v0.83.6) (2022-08-01)
|
|
2
35
|
|
|
3
36
|
|
data/appmap.gemspec
CHANGED
|
@@ -27,11 +27,12 @@ Gem::Specification.new do |spec|
|
|
|
27
27
|
spec.extensions << "ext/appmap/extconf.rb"
|
|
28
28
|
spec.require_paths = ['lib']
|
|
29
29
|
|
|
30
|
-
spec.add_dependency 'activesupport'
|
|
31
30
|
spec.add_dependency 'method_source'
|
|
32
31
|
spec.add_dependency 'rack'
|
|
33
32
|
spec.add_dependency 'reverse_markdown'
|
|
34
33
|
|
|
34
|
+
spec.add_runtime_dependency 'activesupport'
|
|
35
|
+
|
|
35
36
|
spec.add_development_dependency 'bundler', '>= 1.16'
|
|
36
37
|
spec.add_development_dependency 'minitest', '~> 5.15'
|
|
37
38
|
spec.add_development_dependency 'pry-byebug'
|
data/lib/appmap/agent.rb
CHANGED
|
@@ -11,6 +11,14 @@
|
|
|
11
11
|
require_name: active_support/security_utils
|
|
12
12
|
force: true
|
|
13
13
|
- method: ActiveSupport.run_load_hooks
|
|
14
|
-
|
|
14
|
+
labels:
|
|
15
|
+
- deserialize.safe
|
|
16
|
+
- lang.eval.safe
|
|
15
17
|
require_name: active_support/lazy_load_hooks
|
|
16
18
|
force: true
|
|
19
|
+
- method: ActiveSupport::MessageEncryptor#encrypt_and_sign
|
|
20
|
+
require_name: active_support/message_encryptor
|
|
21
|
+
force: true
|
|
22
|
+
- method: ActiveSupport::MessageEncryptor#decrypt_and_verifdy
|
|
23
|
+
require_name: active_support/message_encryptor
|
|
24
|
+
force: true
|
|
@@ -12,5 +12,39 @@
|
|
|
12
12
|
label: crypto.pkcs5
|
|
13
13
|
- method: OpenSSL::Cipher#encrypt
|
|
14
14
|
label: crypto.encrypt
|
|
15
|
+
handler_class: AppMap::Handler::OpenSSLHandler
|
|
15
16
|
- method: OpenSSL::Cipher#decrypt
|
|
16
17
|
label: crypto.decrypt
|
|
18
|
+
handler_class: AppMap::Handler::OpenSSLHandler
|
|
19
|
+
- method: OpenSSL::Cipher#auth_data=
|
|
20
|
+
label: crypto.set_auth_data
|
|
21
|
+
- method: OpenSSL::Cipher#auth_tag=
|
|
22
|
+
label: crypto.set_auth_tag
|
|
23
|
+
- method: OpenSSL::Cipher#auth_tag_len=
|
|
24
|
+
label: crypto.set_auth_tag_len
|
|
25
|
+
- method: OpenSSL::Cipher#ccm_data_len=
|
|
26
|
+
label: crypto.set_ccm_data_len
|
|
27
|
+
- method: OpenSSL::Cipher#iv=
|
|
28
|
+
label: crypto.set_iv
|
|
29
|
+
- method: OpenSSL::Cipher#iv_len=
|
|
30
|
+
label: crypto.set_iv_len
|
|
31
|
+
- method: OpenSSL::Cipher#key=
|
|
32
|
+
label: crypto.set_key
|
|
33
|
+
- method: OpenSSL::Cipher#key_len=
|
|
34
|
+
label: crypto.set_key_len
|
|
35
|
+
- method: OpenSSL::Cipher#padding=
|
|
36
|
+
label: crypto.set_padding
|
|
37
|
+
- method: OpenSSL::Cipher#final
|
|
38
|
+
label: crypto.final
|
|
39
|
+
- methods:
|
|
40
|
+
- OpenSSL::Cipher#random_iv
|
|
41
|
+
- OpenSSL::Cipher#random_key
|
|
42
|
+
- OpenSSL::Cipher#reset
|
|
43
|
+
- OpenSSL::Cipher#update
|
|
44
|
+
- methods:
|
|
45
|
+
- OpenSSL::Random.random_bytes
|
|
46
|
+
label: random.secure
|
|
47
|
+
- methods:
|
|
48
|
+
- OpenSSL::Random#add
|
|
49
|
+
- OpenSSL::Random#seed
|
|
50
|
+
label: pseudorandom.seed
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
- Marshal#load
|
|
3
3
|
- Marshal#restore
|
|
4
4
|
require_name: ruby
|
|
5
|
+
handler_class: AppMap::Handler::MarshalLoadHandler
|
|
5
6
|
label: deserialize.unsafe
|
|
6
7
|
- method: Marshal#dump
|
|
7
8
|
require_name: ruby
|
|
@@ -18,7 +19,7 @@
|
|
|
18
19
|
- Kernel#eval
|
|
19
20
|
require_name: ruby
|
|
20
21
|
label: lang.eval
|
|
21
|
-
handler_class: AppMap::Handler::
|
|
22
|
+
handler_class: AppMap::Handler::EvalHandler
|
|
22
23
|
- methods:
|
|
23
24
|
- IO#popen
|
|
24
25
|
- Kernel#exec
|
|
@@ -29,3 +30,6 @@
|
|
|
29
30
|
- Process#spawn
|
|
30
31
|
require_name: ruby
|
|
31
32
|
label: system.exec
|
|
33
|
+
- methods:
|
|
34
|
+
- ERB#result
|
|
35
|
+
require_name: ruby
|
data/lib/appmap/config.rb
CHANGED
|
@@ -32,8 +32,8 @@ module AppMap
|
|
|
32
32
|
attr_writer :handler_class
|
|
33
33
|
|
|
34
34
|
def handler_class
|
|
35
|
-
require 'appmap/handler/
|
|
36
|
-
@handler_class || AppMap::Handler::
|
|
35
|
+
require 'appmap/handler/function_handler'
|
|
36
|
+
@handler_class || AppMap::Handler::FunctionHandler
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
# Indicates that only the entry points to a package will be recorded.
|
|
@@ -72,7 +72,7 @@ module AppMap
|
|
|
72
72
|
# Builds a package for gem. Generally corresponds to a `gem:` entry in appmap.yml. Also used when mapping
|
|
73
73
|
# a builtin.
|
|
74
74
|
def build_from_gem(gem, shallow: true, require_name: nil, exclude: [], labels: [], optional: false, force: false)
|
|
75
|
-
if !force && %w[method_source
|
|
75
|
+
if !force && %w[method_source].member?(gem)
|
|
76
76
|
warn "WARNING: #{gem} cannot be AppMapped because it is a dependency of the appmap gem"
|
|
77
77
|
return
|
|
78
78
|
end
|
data/lib/appmap/event.rb
CHANGED
|
@@ -84,10 +84,10 @@ module AppMap
|
|
|
84
84
|
# Heuristic for dynamically defined class whose name can be nil
|
|
85
85
|
def best_class_name(value)
|
|
86
86
|
value_cls = value.class
|
|
87
|
-
while value_cls.name.nil?
|
|
87
|
+
while value_cls && value_cls.name.nil?
|
|
88
88
|
value_cls = value_cls.superclass
|
|
89
89
|
end
|
|
90
|
-
value_cls
|
|
90
|
+
value_cls&.name || 'unknown'
|
|
91
91
|
end
|
|
92
92
|
|
|
93
93
|
def encode_display_string(value)
|
|
@@ -193,7 +193,7 @@ module AppMap
|
|
|
193
193
|
|
|
194
194
|
public
|
|
195
195
|
|
|
196
|
-
def build_from_invocation(defined_class, method, receiver, arguments, event: MethodCall.new)
|
|
196
|
+
def build_from_invocation(defined_class, method, receiver, arguments, parameters: method.parameters, event: MethodCall.new)
|
|
197
197
|
event ||= MethodCall.new
|
|
198
198
|
defined_class ||= 'Class'
|
|
199
199
|
|
|
@@ -208,10 +208,10 @@ module AppMap
|
|
|
208
208
|
|
|
209
209
|
# Check if the method has key parameters. If there are any they'll always be last.
|
|
210
210
|
# If yes, then extract it from arguments.
|
|
211
|
-
has_key = [[:dummy], *
|
|
211
|
+
has_key = [[:dummy], *parameters].last.first.to_s.start_with?('key') && arguments[-1].is_a?(Hash)
|
|
212
212
|
kwargs = has_key && arguments[-1].dup || {}
|
|
213
213
|
|
|
214
|
-
event.parameters =
|
|
214
|
+
event.parameters = parameters.map.with_index do |method_param, idx|
|
|
215
215
|
param_type, param_name = method_param
|
|
216
216
|
param_name ||= 'arg'
|
|
217
217
|
value = case param_type
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'appmap/handler/
|
|
3
|
+
require 'appmap/handler/function_handler'
|
|
4
4
|
|
|
5
5
|
module AppMap
|
|
6
6
|
module Handler
|
|
@@ -14,15 +14,30 @@ module AppMap
|
|
|
14
14
|
#
|
|
15
15
|
# If the binding is not provided, by default eval will run in the
|
|
16
16
|
# current frame. Since we call it here, this will mean the #do_call
|
|
17
|
-
# frame, which would make AppMap::Handler::
|
|
17
|
+
# frame, which would make AppMap::Handler::EvalHandler the lexical scope
|
|
18
18
|
# for constant lookup and definition; as a consequence
|
|
19
19
|
# eg. `eval "class Foo; end"` would define
|
|
20
|
-
# AppMap::Handler::
|
|
20
|
+
# AppMap::Handler::EvalHandler::Foo instead of defining it in
|
|
21
21
|
# the module where the original call was made.
|
|
22
22
|
#
|
|
23
23
|
# To avoid this, we explicitly substitute the correct execution
|
|
24
24
|
# context, up several stack frames.
|
|
25
|
-
class
|
|
25
|
+
class EvalHandler < FunctionHandler
|
|
26
|
+
# Kernel#eval reports the method parameters as :rest, instead of what you might expect from
|
|
27
|
+
# the documented signature: eval(string [, binding [, filename [,lineno]]])
|
|
28
|
+
# In the C code, it's defined as rb_f_eval(int argc, const VALUE *argv, VALUE self),
|
|
29
|
+
# so maybe that's why the parameters are reported as :rest.
|
|
30
|
+
#
|
|
31
|
+
# In any case, reporting the parameters as :rest means that the code string, binding, etc
|
|
32
|
+
# are reported in the AppMap as members of an Array, without individual object ids or types.
|
|
33
|
+
#
|
|
34
|
+
# To make eval easier to analyze, fake the hook_method parameters to better match
|
|
35
|
+
# the documentation.
|
|
36
|
+
PARAMETERS= [
|
|
37
|
+
[ :req, :string ],
|
|
38
|
+
[ :rest ],
|
|
39
|
+
]
|
|
40
|
+
|
|
26
41
|
# The depth of the frame we need to pluck out:
|
|
27
42
|
# 1. Hook::Method#do_call
|
|
28
43
|
# 2. Hook::Method#trace_call
|
|
@@ -31,6 +46,10 @@ module AppMap
|
|
|
31
46
|
# 5. the (intended) frame of the original eval that we hooked
|
|
32
47
|
# Note it needs to be adjusted if this call sequence changes.
|
|
33
48
|
FRAME_DEPTH = 5
|
|
49
|
+
|
|
50
|
+
def handle_call(receiver, args)
|
|
51
|
+
AppMap::Event::MethodCall.build_from_invocation(defined_class, hook_method, receiver, args, parameters: PARAMETERS)
|
|
52
|
+
end
|
|
34
53
|
|
|
35
54
|
def do_call(receiver, src = nil, context = nil, *rest)
|
|
36
55
|
context ||= AppMap.caller_binding FRAME_DEPTH
|
|
@@ -6,7 +6,7 @@ require 'appmap/hook/method'
|
|
|
6
6
|
module AppMap
|
|
7
7
|
module Handler
|
|
8
8
|
# Base handler class, will emit method call and return events.
|
|
9
|
-
class
|
|
9
|
+
class FunctionHandler < Hook::Method
|
|
10
10
|
def handle_call(receiver, args)
|
|
11
11
|
AppMap::Event::MethodCall.build_from_invocation(defined_class, hook_method, receiver, args)
|
|
12
12
|
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'appmap/handler/function_handler'
|
|
4
|
+
|
|
5
|
+
module AppMap
|
|
6
|
+
module Handler
|
|
7
|
+
class MarshalLoadHandler < FunctionHandler
|
|
8
|
+
PARAMETERS= [
|
|
9
|
+
[ :req, :source ],
|
|
10
|
+
[ :rest ],
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
def handle_call(receiver, args)
|
|
14
|
+
AppMap::Event::MethodCall.build_from_invocation(defined_class, hook_method, receiver, args, parameters: PARAMETERS)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -29,7 +29,7 @@ module AppMap
|
|
|
29
29
|
|
|
30
30
|
self.request_method = request.method
|
|
31
31
|
self.url = url
|
|
32
|
-
self.headers =
|
|
32
|
+
self.headers = NetHTTPHandler.copy_headers(request)
|
|
33
33
|
self.params = Rack::Utils.parse_nested_query(query)
|
|
34
34
|
end
|
|
35
35
|
|
|
@@ -64,7 +64,7 @@ module AppMap
|
|
|
64
64
|
|
|
65
65
|
if response
|
|
66
66
|
self.status = response.code.to_i
|
|
67
|
-
self.headers =
|
|
67
|
+
self.headers = NetHTTPHandler.copy_headers(response)
|
|
68
68
|
else
|
|
69
69
|
self.headers = {}
|
|
70
70
|
end
|
|
@@ -84,7 +84,7 @@ module AppMap
|
|
|
84
84
|
|
|
85
85
|
# Handler class for HTTP requests.
|
|
86
86
|
# Emits HTTP request events instead of method calls.
|
|
87
|
-
class
|
|
87
|
+
class NetHTTPHandler < Hook::Method
|
|
88
88
|
def self.copy_headers(obj)
|
|
89
89
|
{}.tap do |headers|
|
|
90
90
|
obj.each_header do |key, value|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'appmap/handler/function_handler'
|
|
2
|
+
|
|
3
|
+
module AppMap
|
|
4
|
+
module Handler
|
|
5
|
+
class OpenSSLHandler < FunctionHandler
|
|
6
|
+
def handle_call(receiver, args)
|
|
7
|
+
super.tap do |event|
|
|
8
|
+
algorithm = receiver.name
|
|
9
|
+
event.receiver[:labels] ||= []
|
|
10
|
+
label = [ 'crypto.algorithm', algorithm ].join('.')
|
|
11
|
+
event.receiver[:labels] << label unless event.receiver[:labels].include?(label)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
require 'appmap/handler/
|
|
1
|
+
require 'appmap/handler/function_handler'
|
|
2
2
|
|
|
3
3
|
module AppMap
|
|
4
4
|
module Handler
|
|
5
5
|
module Rails
|
|
6
|
-
class RenderHandler < AppMap::Handler::
|
|
6
|
+
class RenderHandler < AppMap::Handler::FunctionHandler
|
|
7
7
|
def handle_call(receiver, args)
|
|
8
8
|
options, _ = args
|
|
9
9
|
# TODO: :file, :xml
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'appmap/handler/
|
|
3
|
+
require 'appmap/handler/function_handler'
|
|
4
4
|
require 'appmap/event'
|
|
5
5
|
|
|
6
6
|
module AppMap
|
|
@@ -110,7 +110,7 @@ module AppMap
|
|
|
110
110
|
# Hooks the ActionView::Resolver methods +find_all+, +find_all_anywhere+. The resolver is used
|
|
111
111
|
# during template rendering to lookup the template file path from parameters such as the
|
|
112
112
|
# template name, prefix, and partial (boolean).
|
|
113
|
-
class ResolverHandler < AppMap::Handler::
|
|
113
|
+
class ResolverHandler < AppMap::Handler::FunctionHandler
|
|
114
114
|
def handle_call(receiver, args)
|
|
115
115
|
name, prefix, partial = args
|
|
116
116
|
warn "Resolver: #{{ name: name, prefix: prefix, partial: partial }}" if LOG
|
data/lib/appmap/hook/method.rb
CHANGED
|
@@ -83,7 +83,7 @@ module AppMap
|
|
|
83
83
|
end
|
|
84
84
|
|
|
85
85
|
def trace?
|
|
86
|
-
return false unless AppMap.
|
|
86
|
+
return false unless AppMap.tracing_enabled?
|
|
87
87
|
return false if Thread.current[HOOK_DISABLE_KEY]
|
|
88
88
|
return false if hook_package&.shallow? && AppMap.tracing.last_package_for_current_thread == hook_package
|
|
89
89
|
|
data/lib/appmap/rspec.rb
CHANGED
|
@@ -157,14 +157,20 @@ module AppMap
|
|
|
157
157
|
AppMap.info 'Configuring AppMap recorder for RSpec' if first_recording?
|
|
158
158
|
@recording_count += 1
|
|
159
159
|
|
|
160
|
-
|
|
160
|
+
recording = if example.metadata[:appmap] != false
|
|
161
|
+
Recording.new(example)
|
|
162
|
+
else
|
|
163
|
+
:false
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
@recordings_by_example[example.object_id] = recording
|
|
161
167
|
end
|
|
162
168
|
|
|
163
169
|
def end_spec(example, exception:)
|
|
164
170
|
recording = @recordings_by_example.delete(example.object_id)
|
|
165
171
|
return warn "No recording found for #{example}" unless recording
|
|
166
172
|
|
|
167
|
-
recording.finish exception
|
|
173
|
+
recording.finish exception unless recording == :false
|
|
168
174
|
end
|
|
169
175
|
|
|
170
176
|
def config
|
data/lib/appmap/util.rb
CHANGED
data/lib/appmap/version.rb
CHANGED
data/lib/appmap.rb
CHANGED
|
@@ -20,13 +20,6 @@
|
|
|
20
20
|
# - appmap/swagger (Rake task)
|
|
21
21
|
# - appmap/depends (Rake task)
|
|
22
22
|
|
|
23
|
-
begin
|
|
24
|
-
require 'active_support'
|
|
25
|
-
require 'active_support/core_ext'
|
|
26
|
-
rescue NameError
|
|
27
|
-
warn 'active_support is not available. AppMap execution will continue optimistically without it...'
|
|
28
|
-
end
|
|
29
|
-
|
|
30
23
|
require 'appmap/version'
|
|
31
24
|
require 'appmap/agent'
|
|
32
25
|
|
metadata
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: appmap
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.86.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: 2022-08-
|
|
11
|
+
date: 2022-08-10 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
14
|
+
name: method_source
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
17
|
- - ">="
|
|
@@ -25,7 +25,7 @@ dependencies:
|
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '0'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
28
|
+
name: rack
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
31
|
- - ">="
|
|
@@ -39,7 +39,7 @@ dependencies:
|
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '0'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
42
|
+
name: reverse_markdown
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
45
|
- - ">="
|
|
@@ -53,7 +53,7 @@ dependencies:
|
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '0'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
56
|
+
name: activesupport
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
59
|
- - ">="
|
|
@@ -353,6 +353,7 @@ files:
|
|
|
353
353
|
- ext/appmap/extconf.rb
|
|
354
354
|
- lib/appmap.rb
|
|
355
355
|
- lib/appmap/agent.rb
|
|
356
|
+
- lib/appmap/builtin_hooks/activesupport.yml
|
|
356
357
|
- lib/appmap/builtin_hooks/json.yml
|
|
357
358
|
- lib/appmap/builtin_hooks/logger.yml
|
|
358
359
|
- lib/appmap/builtin_hooks/net/http.yml
|
|
@@ -383,19 +384,21 @@ files:
|
|
|
383
384
|
- lib/appmap/gem_hooks/activejob-cancel.yml
|
|
384
385
|
- lib/appmap/gem_hooks/activejob.yml
|
|
385
386
|
- lib/appmap/gem_hooks/activerecord.yml
|
|
386
|
-
- lib/appmap/gem_hooks/activesupport.yml
|
|
387
387
|
- lib/appmap/gem_hooks/cancancan.yml
|
|
388
388
|
- lib/appmap/gem_hooks/devise.yml
|
|
389
389
|
- lib/appmap/gem_hooks/pandoc-ruby.yml
|
|
390
390
|
- lib/appmap/gem_hooks/rails.yml
|
|
391
391
|
- lib/appmap/gem_hooks/railties.yml
|
|
392
|
+
- lib/appmap/gem_hooks/random.yml
|
|
392
393
|
- lib/appmap/gem_hooks/resque.yml
|
|
393
394
|
- lib/appmap/gem_hooks/sidekiq.yml
|
|
394
395
|
- lib/appmap/gem_hooks/sprockets.yml
|
|
395
396
|
- lib/appmap/handler.rb
|
|
396
|
-
- lib/appmap/handler/
|
|
397
|
-
- lib/appmap/handler/
|
|
398
|
-
- lib/appmap/handler/
|
|
397
|
+
- lib/appmap/handler/eval_handler.rb
|
|
398
|
+
- lib/appmap/handler/function_handler.rb
|
|
399
|
+
- lib/appmap/handler/marshal_load_handler.rb
|
|
400
|
+
- lib/appmap/handler/net_http_handler.rb
|
|
401
|
+
- lib/appmap/handler/open_ssl_handler.rb
|
|
399
402
|
- lib/appmap/handler/rails/render_handler.rb
|
|
400
403
|
- lib/appmap/handler/rails/request_handler.rb
|
|
401
404
|
- lib/appmap/handler/rails/sql_handler.rb
|