class Rigor::ModuleGraph::CLI::Render
Shared base for dot / mermaid — both load an edges JSONL and print a rendered string.
Public Class Methods
Source
# File lib/rigor/module_graph/cli.rb, line 751 def initialize(format, stdout:, stderr:, stdin:) @format = format @stdout = stdout @stderr = stderr @stdin = stdin @state = { collapse: [], kinds: nil, confidences: nil, from: nil, depth: nil, direction: :both, edge_scope: :cluster, package: nil } end
Public Instance Methods
Source
# File lib/rigor/module_graph/cli.rb, line 793 def package_groups(edges) return nil unless @state[:package] overlay = PackwerkOverlay.discover(@state[:package]) unless overlay.any? @stderr.puts "rigor-module-graph #{@format}: no package.yml found under #{@state[:package].inspect}" return nil end overlay.groups_for(edges) end
Source
# File lib/rigor/module_graph/cli.rb, line 805 def parse_options!(argv) parser = OptionParser.new do |opts| opts.banner = "Usage: rigor-module-graph #{@format} [options] [FILE]" opts.on("--collapse PREFIXES", Array, "Comma-separated namespace prefixes to fold into clusters") do |prefixes| @state[:collapse].concat(prefixes) end opts.on("--package", "Cluster by Packwerk packages discovered in cwd") do @state[:package] ||= "." end opts.on("--package-root PATH", "Cluster by Packwerk packages discovered under PATH") do |root| @state[:package] = root end add_filter_options(opts, @state) opts.on("-h", "--help") do @stdout.puts opts exit 0 end end parser.parse!(argv) end
Source
# File lib/rigor/module_graph/cli.rb, line 829 def rendered(edges, groups) case @format when :dot then Dot.render(edges, collapse: @state[:collapse], groups: groups) when :mermaid then Mermaid.render(edges, collapse: @state[:collapse], groups: groups) end end
Source
# File lib/rigor/module_graph/cli.rb, line 763 def run(argv) argv = argv.dup parse_options!(argv) path, = argv io = path ? File.open(path, "r") : @stdin begin edges = EdgeIO.read(io) ensure io.close if path && !io.closed? end edges = apply_filters( edges, kinds: @state[:kinds], confidences: @state[:confidences], from: @state[:from], depth: @state[:depth], direction: @state[:direction], edge_scope: @state[:edge_scope] ) groups = package_groups(edges) @stdout.print(rendered(edges, groups)) 0 rescue Errno::ENOENT => e @stderr.puts "rigor-module-graph #{@format}: #{e.message}" 1 rescue OptionParser::ParseError => e @stderr.puts "rigor-module-graph #{@format}: #{e.message}" 2 end