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