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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
# File 'lib/nanoc/cli/commands/show-plugins.rb', line 11
def run
if arguments.any?
raise Nanoc::Int::Errors::GenericTrivial, "usage: #{command.usage}"
end
plugins_before = Nanoc::Int::PluginRegistry.instance.all
site.code_snippets if site
plugins_after = Nanoc::Int::PluginRegistry.instance.all
plugins_builtin = plugins_before
plugins_custom = plugins_after - plugins_before
plugin_with_longest_identifiers = plugins_after.reduce do |longest, current|
longest[:identifiers].join(', ').size > current[:identifiers].join(', ').size ? longest : current
end
max_identifiers_length = plugin_with_longest_identifiers[:identifiers].join(', ').size
PLUGIN_CLASS_ORDER.each do |superclass|
plugins_with_this_superclass = {
builtin: plugins_builtin.select { |p| p[:superclass] == superclass },
custom: plugins_custom.select { |p| p[:superclass] == superclass },
}
kind = name_for_plugin_class(superclass)
puts "#{kind}:"
puts
[:builtin, :custom].each do |type|
relevant_plugins = plugins_with_this_superclass[type]
puts " #{type}:"
if relevant_plugins.empty?
puts ' (none)'
next
end
relevant_plugins.sort_by { |k| k[:identifiers].join(', ') }.each do |plugin|
puts format(
" %-#{max_identifiers_length}s (%s)",
plugin[:identifiers].join(', '),
plugin[:class].to_s.sub(/^::/, ''),
)
end
end
puts
end
end
|