def run
if arguments.size != 0
raise Nanoc::Errors::GenericTrivial, "usage: #{command.usage}"
end
plugins_before = Nanoc::Plugin.all
self.site.code_snippets if self.site
plugins_after = Nanoc::Plugin.all
plugins_builtin = plugins_before
plugins_custom = plugins_after - plugins_before
plugin_with_longest_identifiers = plugins_after.inject 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 sprintf(
" %-#{max_identifiers_length}s (%s)",
plugin[:identifiers].join(', '),
plugin[:class].to_s.sub(/^::/, '')
)
end
end
puts
end
end