appmap 0.93.5 → 0.94.1
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 +14 -0
- data/lib/appmap/event.rb +6 -24
- data/lib/appmap/value_inspector.rb +50 -0
- data/lib/appmap/version.rb +2 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ca46315eb8aa31221cee8a1d656187a4e4355e63f6b2be1d591829dddb76f7e0
|
4
|
+
data.tar.gz: d038130a2827f01f573bf69dbe32ab837d7ff68b28dce7a6076a80eee2f4550e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58a84ec34e17b22acf37fd0b9f964fb93f82531cb7f800721d33214b1bc434b81e47cbf7202f87ddeade990644d4cc512898125bc59851e82f035f9093c31eb2
|
7
|
+
data.tar.gz: a8a0bfa9cf83dc59d6e3848228f602bf8030c01601755a853a55ee4b452a970e2de1c823649da1fc0b557b8b9b6ba24c142f324975a20a222aadc239d37958b1
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
## [0.94.1](https://github.com/getappmap/appmap-ruby/compare/v0.94.0...v0.94.1) (2022-11-23)
|
2
|
+
|
3
|
+
|
4
|
+
### Bug Fixes
|
5
|
+
|
6
|
+
* Handle properties of mixed content and repeated values ([4e14eb8](https://github.com/getappmap/appmap-ruby/commit/4e14eb8f4650368b3fdcb3f30be2969df3998e05))
|
7
|
+
|
8
|
+
# [0.94.0](https://github.com/getappmap/appmap-ruby/compare/v0.93.5...v0.94.0) (2022-11-22)
|
9
|
+
|
10
|
+
|
11
|
+
### Features
|
12
|
+
|
13
|
+
* Emit nested return_value.properties ([2c74c68](https://github.com/getappmap/appmap-ruby/commit/2c74c68f9e2a5bcb3f095850c9d520422b63e25f))
|
14
|
+
|
1
15
|
## [0.93.5](https://github.com/getappmap/appmap-ruby/compare/v0.93.4...v0.93.5) (2022-11-08)
|
2
16
|
|
3
17
|
|
data/lib/appmap/event.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'weakref'
|
4
|
+
require_relative './value_inspector'
|
4
5
|
|
5
6
|
module AppMap
|
6
7
|
module Event
|
@@ -20,6 +21,8 @@ module AppMap
|
|
20
21
|
MethodEventStruct = Struct.new(:id, :event, :thread_id)
|
21
22
|
|
22
23
|
class MethodEvent < MethodEventStruct
|
24
|
+
extend ValueInspector
|
25
|
+
|
23
26
|
MAX_ARRAY_ENUMERATION = 10
|
24
27
|
MAX_HASH_ENUMERATION = 10
|
25
28
|
MAX_STRING_LENGTH = 100
|
@@ -61,33 +64,12 @@ module AppMap
|
|
61
64
|
end
|
62
65
|
|
63
66
|
def add_size(param, value)
|
64
|
-
|
65
|
-
|
66
|
-
param[:size] = value.size
|
67
|
-
end
|
67
|
+
size = ValueInspector.detect_size(value)
|
68
|
+
param[:size] = size if size
|
68
69
|
end
|
69
70
|
|
70
71
|
def add_schema(param, value)
|
71
|
-
|
72
|
-
if value.respond_to?(:keys)
|
73
|
-
param[:properties] = value.keys.map { |key| { name: key, class: best_class_name(value[key]) } }
|
74
|
-
elsif value.respond_to?(:first) && value.first
|
75
|
-
if value.first != value
|
76
|
-
add_schema param, value.first
|
77
|
-
end
|
78
|
-
end
|
79
|
-
rescue
|
80
|
-
warn "Error in add_schema(#{value.class})", $!
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
# Heuristic for dynamically defined class whose name can be nil
|
85
|
-
def best_class_name(value)
|
86
|
-
value_cls = value.class
|
87
|
-
while value_cls && value_cls.name.nil?
|
88
|
-
value_cls = value_cls.superclass
|
89
|
-
end
|
90
|
-
value_cls&.name || 'unknown'
|
72
|
+
ValueInspector.detect_schema(value, type_info: param)
|
91
73
|
end
|
92
74
|
|
93
75
|
def encode_display_string(value)
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module AppMap
|
2
|
+
module ValueInspector
|
3
|
+
extend self
|
4
|
+
|
5
|
+
MAX_DEPTH = 3
|
6
|
+
|
7
|
+
def detect_size(value)
|
8
|
+
# Don't risk calling #size on things like data-access objects, which can and will issue queries for this information.
|
9
|
+
if value.is_a?(Array) || value.is_a?(Hash)
|
10
|
+
value.size
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def detect_schema(value, max_depth: MAX_DEPTH, type_info: {}, observed_values: Set.new(), depth: 0)
|
15
|
+
return type_info if depth == max_depth
|
16
|
+
|
17
|
+
if value.respond_to?(:keys)
|
18
|
+
return if observed_values.include?(value.object_id)
|
19
|
+
|
20
|
+
observed_values << value.object_id
|
21
|
+
|
22
|
+
properties = value.keys.select { |key| key != "" && !key.nil? }.map do |key|
|
23
|
+
next_value = value[key]
|
24
|
+
|
25
|
+
value_schema = begin
|
26
|
+
{ name: key, class: best_class_name(next_value) }
|
27
|
+
rescue
|
28
|
+
warn "Error in add_schema(#{next_value.class})", $!
|
29
|
+
raise
|
30
|
+
end
|
31
|
+
|
32
|
+
detect_schema(next_value, **{ max_depth: max_depth, type_info: value_schema, observed_values: observed_values, depth: depth + 1 })
|
33
|
+
end.compact
|
34
|
+
type_info[:properties] = properties unless properties.empty?
|
35
|
+
elsif value.respond_to?(:first)
|
36
|
+
detect_schema(value.first, **{ max_depth: max_depth, type_info: type_info, observed_values: observed_values, depth: depth + 1 })
|
37
|
+
end
|
38
|
+
type_info
|
39
|
+
end
|
40
|
+
|
41
|
+
# Heuristic for dynamically defined class whose name can be nil
|
42
|
+
def best_class_name(value)
|
43
|
+
value_cls = value.class
|
44
|
+
while value_cls && value_cls.name.nil?
|
45
|
+
value_cls = value_cls.superclass
|
46
|
+
end
|
47
|
+
value_cls&.name || "unknown"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/appmap/version.rb
CHANGED
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.
|
4
|
+
version: 0.94.1
|
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-11-
|
11
|
+
date: 2022-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: method_source
|
@@ -432,6 +432,7 @@ files:
|
|
432
432
|
- lib/appmap/swagger/stable.rb
|
433
433
|
- lib/appmap/trace.rb
|
434
434
|
- lib/appmap/util.rb
|
435
|
+
- lib/appmap/value_inspector.rb
|
435
436
|
- lib/appmap/version.rb
|
436
437
|
- package.json
|
437
438
|
- release.sh
|