TeapotSourceTeapotCommandVisualizeTargets

class Targets

Visualize target-level dependencies.

Nested

Definitions

def process(selection)

Process and generate the target dependency visualization.

Signature

parameter selection Select

The selection to visualize.

returns String

The generated Mermaid diagram.

Implementation

def process(selection)
	lines = ["flowchart LR"]
	lines << ""
	
	# Build the graph from all targets in the selection
	# The selection contains all targets loaded from packages
	selection.targets.each do |name, target|
		target.dependencies.each do |dependency|
			dependency_name = dependency.name.to_s
			
			# Create edge from target to its dependency
			if dependency.private?
				lines << "    #{sanitize_id(name)}[#{name}] -.-> #{sanitize_id(dependency_name)}[#{dependency_name}]"
			else
				lines << "    #{sanitize_id(name)}[#{name}] --> #{sanitize_id(dependency_name)}[#{dependency_name}]"
			end
		end
	end
	
	diagram = lines.join("\n")
	
	if output_path = @options[:output_path]
		File.write(output_path, diagram)
	else
		$stdout.puts diagram
	end
	
	return diagram
end

def sanitize_id(name)

Convert a name to a valid Mermaid node ID.

Signature

parameter name String

The name to sanitize.

returns String

A sanitized identifier safe for use in Mermaid diagrams.

Implementation

def sanitize_id(name)
	name.to_s.gsub(/[^a-zA-Z0-9_]/, "_")
end