Methods

Class/Module Index [+]

Quicksearch

Nanoc::CLI::Commands::ShowPlugins

Public Instance Methods

run() click to toggle source
# File lib/nanoc/cli/commands/show-plugins.rb, line 14
def run
  # Check arguments
  if arguments.size != 0
    raise Nanoc::Errors::GenericTrivial, "usage: #{command.usage}"
  end

  # Get list of plugins (before and after)
  plugins_before = Nanoc::Plugin.all
  self.site.code_snippets if self.site
  plugins_after  = Nanoc::Plugin.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.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 }
    }

    # 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 sprintf(
          "    %-#{max_identifiers_length}s (%s)",
          plugin[:identifiers].join(', '),
          plugin[:class].to_s.sub(/^::/, '')
        )
      end
    end

    puts
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.