appmap 0.96.0 → 0.97.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 61981b3f49d81c6fdcda62cf208337616384071296374168ec44cf823bc4fcf1
4
- data.tar.gz: c6d86f477f4dd2dc4832963d84f0985c90d474b2428a5a511e5726ba34d7b0bc
3
+ metadata.gz: d8f61995f7dd2cfd9ac33245e4248b4e3fb54f3063eacee3070da171ef852847
4
+ data.tar.gz: ff3648db694330d2d8242601fc6380320fa49252f68065fa1a7e1f416e96fbe2
5
5
  SHA512:
6
- metadata.gz: c5f54cd66a79510f13e1cbf1ed8db3b634bac1b15b5bfd371433caa3cf7b1bcbe46e4ee9d18b38823596cddd754f461c0db88b18978e5a1410f37fdea5a460d0
7
- data.tar.gz: 5cc2ec60a06b35f34e72ca19aba2fe34e0a89727aed0acb167d04c22d2a98f73787ccbb089bff76bc4439fcfef94b3e3ef508e73c459350797aee7f7fea8df14
6
+ metadata.gz: da483d2262fa5f9691bb59293f5ec5d7a0a5b3910b68db99171e7d9b4b398e3203f8cbbe614407e91bc4d82e50c2bbf35a62562b1e31a2f59820ef893e0e7506
7
+ data.tar.gz: f7e30a0d17c134e5dd2f261707a8b4594c39ec795bbef8ef35af71e26c51b70ebd500cfe020b2f736be0b0bd1afb84baeff49d36624233234e07a936eb467ce4
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # [0.97.0](https://github.com/getappmap/appmap-ruby/compare/v0.96.0...v0.97.0) (2023-02-10)
2
+
3
+
4
+ ### Features
5
+
6
+ * Implement `items` Parameter object format (AppMap v1.10.0) ([9a28773](https://github.com/getappmap/appmap-ruby/commit/9a2877396187393adfe6e4379f0d6a735d5678b4))
7
+
1
8
  # [0.96.0](https://github.com/getappmap/appmap-ruby/compare/v0.95.2...v0.96.0) (2023-02-01)
2
9
 
3
10
 
@@ -3,6 +3,7 @@ module AppMap
3
3
  extend self
4
4
 
5
5
  MAX_DEPTH = 3
6
+ MAX_ARRAY_ELEMENTS = 5
6
7
 
7
8
  def detect_size(value)
8
9
  # Don't risk calling #size on things like data-access objects, which can and will issue queries for this information.
@@ -11,10 +12,17 @@ module AppMap
11
12
  end
12
13
  end
13
14
 
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
15
+ def detect_schema(
16
+ value,
17
+ max_depth: MAX_DEPTH,
18
+ max_array_elements: MAX_ARRAY_ELEMENTS,
19
+ type_info: { class: best_class_name(value) },
20
+ observed_values: Set.new,
21
+ depth: 0
22
+ )
23
+ return type_info if depth >= max_depth && !array_like?(value)
16
24
 
17
- if value.respond_to?(:keys)
25
+ if hash_like?(value)
18
26
  return if observed_values.include?(value.object_id)
19
27
 
20
28
  observed_values << value.object_id
@@ -23,17 +31,22 @@ module AppMap
23
31
  next_value = value[key]
24
32
 
25
33
  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
34
+ { name: key, class: best_class_name(next_value) }
35
+ rescue
36
+ warn "Error in add_schema(#{next_value.class})", $!
37
+ raise
38
+ end
31
39
 
32
40
  detect_schema(next_value, **{ max_depth: max_depth, type_info: value_schema, observed_values: observed_values, depth: depth + 1 })
33
41
  end.compact
34
42
  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 })
43
+ elsif array_like?(value)
44
+ type_info[:items] = value.take(max_array_elements).map do |next_value|
45
+ value_schema = { class: best_class_name(next_value) }
46
+ detect_schema(next_value, **{ max_depth: max_depth, type_info: value_schema, observed_values: observed_values, depth: depth + 1 })
47
+ end
48
+
49
+ type_info[:items] = type_info[:items].compact.uniq(&:hash)
37
50
  end
38
51
  type_info
39
52
  end
@@ -46,5 +59,15 @@ module AppMap
46
59
  end
47
60
  value_cls&.name || "unknown"
48
61
  end
62
+
63
+ private
64
+
65
+ def array_like?(value)
66
+ value.is_a?(Enumerable) && !hash_like?(value)
67
+ end
68
+
69
+ def hash_like?(value)
70
+ value.respond_to?(:keys)
71
+ end
49
72
  end
50
73
  end
@@ -3,7 +3,7 @@
3
3
  module AppMap
4
4
  URL = 'https://github.com/applandinc/appmap-ruby'
5
5
 
6
- VERSION = '0.96.0'
6
+ VERSION = '0.97.0'
7
7
 
8
8
  APPMAP_FORMAT_VERSION = '1.10.0'
9
9
 
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.96.0
4
+ version: 0.97.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: 2023-02-01 00:00:00.000000000 Z
11
+ date: 2023-02-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: method_source