Skip to content

Commit 7c18f24

Browse files
committed
avoid recursive valid value check.
1 parent 0fb0a9f commit 7c18f24

1 file changed

Lines changed: 21 additions & 13 deletions

File tree

sdk/lib/opentelemetry/sdk/internal.rb

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,21 +28,29 @@ def valid_simple_value?(value)
2828
value.instance_of?(String) || boolean?(value) || numeric?(value) || value.nil?
2929
end
3030

31-
def valid_array_value?(value)
32-
return false unless value.is_a?(Array)
33-
34-
value.all? { |v| valid_value?(v) }
35-
end
36-
37-
def valid_mapping_value?(value)
38-
return false unless value.is_a?(Hash)
39-
return false unless value.keys.all? { |k| valid_key?(k) }
31+
def valid_value?(value)
32+
to_check = [value]
33+
seen = Set.new
34+
until to_check.empty?
35+
current = to_check.pop
36+
next if valid_simple_value?(current)
4037

41-
value.values.all? { |v| valid_value?(v) }
42-
end
38+
return false if seen.include?(current.object_id)
39+
seen << current.object_id
4340

44-
def valid_value?(value)
45-
valid_simple_value?(value) || valid_array_value?(value) || valid_mapping_value?(value)
41+
case current
42+
when Array
43+
current.each { |v| to_check << v }
44+
when Hash
45+
current.each do |k, v|
46+
return false unless valid_key?(k)
47+
to_check << v
48+
end
49+
else
50+
return false
51+
end
52+
end
53+
true
4654
end
4755

4856
def valid_attributes?(owner, kind, attrs)

0 commit comments

Comments
 (0)