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.
751 752 753 754 755 756 757 758 759 760 761 |
# 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 |
Instance Method Details
#package_groups(edges) ⇒ Object
793 794 795 796 797 798 799 800 801 802 803 |
# File 'lib/rigor/module_graph/cli.rb', line 793 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
805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 |
# File 'lib/rigor/module_graph/cli.rb', line 805 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
829 830 831 832 833 834 |
# 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 |
#run(argv) ⇒ Object
763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 |
# File 'lib/rigor/module_graph/cli.rb', line 763 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 |