# 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

    # File lib/chef/knife/help.rb, line 68
    def print_help_topics
      ui.info "Available help topics are: "
      help_topics.collect {|t| t.gsub(/knife-/, '') }.sort.each do |topic|
        ui.msg "  #{topic}"
      end
    end

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