Class: Nanoc::CLI::Commands::ShowPlugins Private

Inherits:
Nanoc::CLI::CommandRunner show all
Defined in:
lib/nanoc/cli/commands/show-plugins.rb

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Constant Summary collapse

PLUGIN_CLASS_ORDER =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

[
  Nanoc::Filter,
  Nanoc::DataSource,
  Nanoc::Extra::Deployer,
].freeze
PLUGIN_CLASSES =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

{
  Nanoc::Filter          => 'Filters',
  Nanoc::DataSource      => 'Data Sources',
  Nanoc::Extra::Deployer => 'Deployers',
}.freeze

Instance Method Summary collapse

Methods inherited from Nanoc::CLI::CommandRunner

#call, #debug?, #in_site_dir?, #load_site, #site, #site=

Instance Method Details

#runObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



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
  # Check arguments
  if arguments.any?
    raise Nanoc::Int::Errors::GenericTrivial, "usage: #{command.usage}"
  end

  # Get list of plugins (before and after)
  plugins_before = Nanoc::Int::PluginRegistry.instance.all
  site.code_snippets if site
  plugins_after = Nanoc::Int::PluginRegistry.instance.all

  # Divide list of plugins into builtin and custom
  plugins_builtin = plugins_before
  plugins_custom  = plugins_after - plugins_before

  # Find max identifiers length
  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 },
    }

    # Print kind
    kind = name_for_plugin_class(superclass)
    puts "#{kind}:"
    puts

    # Print plugins organised by subtype
    [:builtin, :custom].each do |type|
      # Find relevant plugins
      relevant_plugins = plugins_with_this_superclass[type]

      # Print type
      puts "  #{type}:"
      if relevant_plugins.empty?
        puts '    (none)'
        next
      end

      # Print plugins
      relevant_plugins.sort_by { |k| k[:identifiers].join(', ') }.each do |plugin|
        # Display
        puts format(
          "    %-#{max_identifiers_length}s (%s)",
          plugin[:identifiers].join(', '),
          plugin[:class].to_s.sub(/^::/, ''),
        )
      end
    end

    puts
  end
end