Class: Rigor::ModuleGraph::CLI::Render
- Inherits:
-
Object
- Object
- Rigor::ModuleGraph::CLI::Render
- Includes:
- EdgeFilters
- Defined in:
- lib/rigor/module_graph/cli.rb
Overview
Shared base for ‘dot` / `mermaid` — both load an edges JSONL and print a rendered string.
Constant Summary
Constants included from EdgeFilters
EdgeFilters::VALID_CONFIDENCES, EdgeFilters::VALID_DIRECTIONS, EdgeFilters::VALID_EDGE_SCOPES, EdgeFilters::VALID_KINDS
Instance Method Summary collapse
-
#initialize(format, stdout:, stderr:, stdin:) ⇒ Render
constructor
A new instance of Render.
- #package_groups(edges) ⇒ Object
- #parse_options!(argv) ⇒ Object
- #rendered(edges, groups) ⇒ Object
- #run(argv) ⇒ Object
Methods included from EdgeFilters
#add_filter_options, #apply_filters, #validate!
Constructor Details
#initialize(format, stdout:, stderr:, stdin:) ⇒ Render
Returns a new instance of Render.
707 708 709 710 711 712 713 714 715 716 717 |
# File 'lib/rigor/module_graph/cli.rb', line 707 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 |
Instance Method Details
#package_groups(edges) ⇒ Object
749 750 751 752 753 754 755 756 757 758 759 |
# File 'lib/rigor/module_graph/cli.rb', line 749 def package_groups(edges) return nil unless @state[:package] = PackwerkOverlay.discover(@state[:package]) unless .any? @stderr.puts "rigor-module-graph #{@format}: no package.yml found under #{@state[:package].inspect}" return nil end .groups_for(edges) end |
#parse_options!(argv) ⇒ Object
761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 |
# File 'lib/rigor/module_graph/cli.rb', line 761 def (argv) parser = OptionParser.new do |opts| opts. = "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 (opts, @state) opts.on("-h", "--help") do @stdout.puts opts exit 0 end end parser.parse!(argv) end |
#rendered(edges, groups) ⇒ Object
785 786 787 788 789 790 |
# File 'lib/rigor/module_graph/cli.rb', line 785 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 |
#run(argv) ⇒ Object
719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 |
# File 'lib/rigor/module_graph/cli.rb', line 719 def run(argv) argv = argv.dup (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.}" 1 rescue OptionParser::ParseError => e @stderr.puts "rigor-module-graph #{@format}: #{e.}" 2 end |