34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
# File 'lib/vcr/unused_cassettes/call_context.rb', line 34
def (node, string_interpolation_error: :raise)
case node.type
when :nil_node
nil
when :string_node
node.unescaped
when :symbol_node
node.unescaped.to_sym
when :hash_node, :keyword_hash_node
node.elements.each_with_object({}) do |element, hash|
if element.type == :assoc_splat_node
hash.merge((element.value, string_interpolation_error: string_interpolation_error))
next
end
key = (element.key, string_interpolation_error: string_interpolation_error)
value = (element.value, string_interpolation_error: string_interpolation_error)
hash[key] = value
rescue ValueUnresolveable
next
end
when :array_node
node.elements.map do |element|
(element, string_interpolation_error: string_interpolation_error)
end
when :interpolated_string_node
node.parts.map do |part_node|
if part_node.type == :embedded_statements_node
if part_node.statements.body.size != 1
if string_interpolation_error == :raise
raise ValueUnresolveable, "Could not resolve value for node: #{part_node.inspect}"
elsif string_interpolation_error == :wildcard
"*"
end
else
(part_node.statements.body.first, string_interpolation_error: string_interpolation_error)
end
else
(part_node, string_interpolation_error: string_interpolation_error)
end
rescue ValueUnresolveable
if string_interpolation_error == :raise
raise ValueUnresolveable, "Could not resolve value for node: #{part_node.inspect}"
elsif string_interpolation_error == :wildcard
"*"
end
end.join
when :local_variable_read_node, :instance_variable_read_node
resolve_variable(node.name)
when :constant_read_node
@context.dig(:constants, node.name)
when :assoc_splat_node
(node.value, string_interpolation_error: string_interpolation_error)
else
if node.respond_to?(:value) && !node.value.is_a?(Prism::Node)
node.value
else
raise ValueUnresolveable, "Could not resolve value for node: #{node.inspect}"
end
end
end
|