class Chef::Knife::Help

Public Instance Methods

find_manpage_path(topic) click to toggle source
# File lib/chef/knife/help.rb, line 92
def find_manpage_path(topic)
  if ::File.exists?(::File.expand_path("../distro/common/man/man1/#{topic}.1", CHEF_ROOT))
    # If we've provided the man page in the gem, give that
    return ::File.expand_path("../distro/common/man/man1/#{topic}.1", CHEF_ROOT)
  else
    # Otherwise, we'll just be using MANPATH
    topic
  end
end
find_manpages_for_query(query) click to toggle source
# File lib/chef/knife/help.rb, line 75
def find_manpages_for_query(query)
  possibilities = help_topics.select do |manpage|
    ::File.fnmatch("knife-#{query}*", manpage) || ::File.fnmatch("#{query}*", manpage)
  end
  if possibilities.empty?
    ui.error "No help found for '#{query}'"
    ui.msg ""
    print_help_topics
    exit 1
  elsif possibilities.size == 1
    possibilities.first
  else
    ui.info "Multiple help topics match your query. Pick one:"
    ui.highline.choose(*possibilities)
  end
end
help_topics() click to toggle source
# File lib/chef/knife/help.rb, line 62
def help_topics
  # The list of help topics is generated by a rake task from the available man pages
  # This constant is provided in help_topics.rb which is automatically required/loaded by the knife subcommand loader.
  HELP_TOPICS
end
print_help_topics() click to toggle source
run() click to toggle source
# File lib/chef/knife/help.rb, line 25
      def run
        if name_args.empty?
          ui.info "Usage: knife SUBCOMMAND (options)"
          ui.msg ""
          # This command is atypical, the user is likely not interested in usage of
          # this command, but knife in general. So hack the banner.
          opt_parser.banner = "General Knife Options:"
          ui.msg opt_parser.to_s
          ui.msg ""
          ui.info "For further help:"
          ui.info("  knife help list             list help topics
  knife help knife            show general knife help
  knife help TOPIC            display the manual for TOPIC
  knife SUBCOMMAND --help     show the options for a command
")
          exit 1
        else
          @query = name_args.join('-')
        end



        case @query
        when 'topics', 'list'
          print_help_topics
          exit 1
        when 'intro', 'knife'
          @topic = 'knife'
        else
          @topic = find_manpages_for_query(@query)
        end

        manpage_path = find_manpage_path(@topic)
        exec "man #{manpage_path}"
      end