class RailInspector::Visitor::FrameworkDefault::VersionedConfig
Attributes
Public Class Methods
# File tools/rail_inspector/lib/rail_inspector/visitor/framework_default.rb, line 36 def initialize @configs = {} @framework_stack = [] end
Public Instance Methods
# File tools/rail_inspector/lib/rail_inspector/visitor/framework_default.rb, line 75 def handle_assignment(node, name, value) prefix = case node.receiver in Prism::ConstantReadNode[name: constant_name] constant_name in Prism::SelfNode "self" in Prism::CallNode[receiver: nil, name: framework] framework_string = framework.to_s unless current_framework == framework_string raise "expected: #{current_framework}, actual: #{framework_string}" end framework_string else node.receiver.location.slice end target = "#{prefix}.#{name}" string_value = case value in Prism::ConstantPathNode value.full_name in Prism::HashNode HashToString.new.tap { |v| v.visit(value) }.to_s in Prism::InterpolatedStringNode "\"#{value.parts.map(&:content).join("")}\"" in Prism::FalseNode "false" in Prism::TrueNode "true" else value.location.slice end @configs[target] = string_value end
Calls superclass method
# File tools/rail_inspector/lib/rail_inspector/visitor/framework_default.rb, line 55 def visit_call_node(node) name = node.name.to_s unless name.end_with? "=" return super end handle_assignment(node, name[...-1], node.arguments.arguments[0]) end
Calls superclass method
# File tools/rail_inspector/lib/rail_inspector/visitor/framework_default.rb, line 65 def visit_call_or_write_node(node) name = node.write_name.to_s unless name.end_with? "=" return super end handle_assignment(node, node.read_name.to_s, node.value) end
# File tools/rail_inspector/lib/rail_inspector/visitor/framework_default.rb, line 41 def visit_if_node(node) unless new_framework = respond_to_framework?(node.predicate) return visit_child_nodes(node) end if ENV["STRICT"] && current_framework raise "Potentially nested framework? Current: '#{current_framework}', found: '#{new_framework}'" end @framework_stack << new_framework visit_child_nodes(node) @framework_stack.pop end