File: prelude.rb

package info (click to toggle)
mikutter 5.1.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 9,780 kB
  • sloc: ruby: 22,912; sh: 186; makefile: 21
file content (50 lines) | stat: -rw-r--r-- 1,420 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# frozen_string_literal: true

using Miquire::ToSpec

Prelude.command :plugin_depends, description: 'Output plugin dependencies.' do
  escape = ->(v) do
    if /[^\w]/.match?(v)
      '"%{v}"' % { v: v.gsub('"', '\"') }
    else
      v
    end
  end

  writer = ->(node, graph, spec) do
    depends = Miquire::Plugin.depended_plugins(spec)
    if (depends || []).empty?
      graph.puts "  #{escape.(spec[:slug])};"
    else
      depends.zip(Array(spec.dig(:depends, :plugin))).each do |depend, src|
        if depend
          graph.puts "  #{escape.(spec[:slug])} -> #{escape.(depend[:slug])};"
        else
          id = src.hash
          node.puts "  #{id} [label = #{escape.(src.inspect)}, shape = box, fillcolor = \"#FFCCCC\", style = \"solid,filled\"];"
          graph.puts "  #{escape.(spec[:slug])} -> #{id};"
        end
      end
    end
  end

  puts 'digraph mikutter_plugin {'

  graph_buf = StringIO.new(String.new, 'r+')

  if Array(Mopt.plugin).empty?
    Miquire::Plugin.each_spec(&writer.curry.($stdout, graph_buf))
  else
    available = Array(Mopt.plugin).inject(Set.new(Array(Mopt.plugin))) do |depends, depend_slug|
      Miquire::Plugin.depended_plugins(depend_slug, recursive: true).each do |spec|
        depends << spec[:slug]
      end
    end
    available.map(&:to_spec).each(&writer.curry.($stdout, graph_buf))
  end

  graph_buf.rewind
  $stdout.write graph_buf.read

  puts '}'
end