Class: RiDriver

Class | RiDriver
In: | rdoc/ri/ri_driver.rb
Parent: | Object

### Methods

get_info_for new process_args report_class_stuff report_method_stuff report_missing_documentation

### Public Class methods

new()

[Source]

    # File rdoc/ri/ri_driver.rb, line 14
      def initialize
        @options = RI::Options.instance

        args = ARGV
        if ENV["RI"]
          args = ENV["RI"].split.concat(ARGV)
        end

        @options.parse(args)

        paths = @options.paths || RI::Paths::PATH
        if paths.empty?
          report_missing_documentation(paths)
        end
        @ri_reader = RI::RiReader.new(RI::RiCache.new(paths))
        @display   = @options.displayer
      end

### Public Instance methods

get_info_for(arg)

[Source]

    # File rdoc/ri/ri_driver.rb, line 86
      def get_info_for(arg)
        desc = NameDescriptor.new(arg)

        namespaces = @ri_reader.top_level_namespace

        for class_name in desc.class_names
          namespaces = @ri_reader.lookup_namespace_in(class_name, namespaces)
          if namespaces.empty?
            raise RiError.new("Nothing known about #{arg}")
          end
        end

        # at this point, if we have multiple possible namespaces, but one
        # is an exact match for our requested class, prune down to just it

        full_class_name = desc.full_class_name
        entries = namespaces.find_all {|m| m.full_name == full_class_name}
        namespaces = entries if entries.size == 1

        if desc.method_name.nil?
          report_class_stuff(namespaces)
        else
          methods = @ri_reader.find_methods(desc.method_name,
                                            desc.is_class_method,
                                            namespaces)

          if methods.empty?
            raise RiError.new("Nothing known about #{arg}")
          else
            report_method_stuff(desc.method_name, methods)
          end
        end
      end

process_args()

[Source]

    # File rdoc/ri/ri_driver.rb, line 122
      def process_args
        if @options.list_classes
          classes = @ri_reader.full_class_names
          @display.list_known_classes(classes)
        elsif @options.list_names
          names = @ri_reader.all_names
          @display.list_known_names(names)
        else
          if ARGV.size.zero?
            @display.display_usage
          else
            begin
              ARGV.each do |arg|
                get_info_for(arg)
              end
            rescue RiError => e
              STDERR.puts(e.message)
              exit(1)
            end
          end
        end
      end

report_class_stuff(namespaces)

[Source]

    # File rdoc/ri/ri_driver.rb, line 68
      def report_class_stuff(namespaces)
        if namespaces.size == 1
          klass = @ri_reader.get_class(namespaces[0])
          @display.display_class_info(klass, @ri_reader)
        else
    #      entries = namespaces.find_all {|m| m.full_name == requested_class_name}
    #      if entries.size == 1
    #        klass = @ri_reader.get_class(entries[0])
    #        @display.display_class_info(klass, @ri_reader)
    #      else
            @display.display_class_list(namespaces)
    #      end
        end
      end

report_method_stuff(requested_method_name, methods)

If the list of matching methods contains exactly one entry, or if it contains an entry that exactly matches the requested method, then display that entry, otherwise display the list of matching method names

[Source]

    # File rdoc/ri/ri_driver.rb, line 51
      def report_method_stuff(requested_method_name, methods)
        if methods.size == 1
          method = @ri_reader.get_method(methods[0])
          @display.display_method_info(method)
        else
          entries = methods.find_all {|m| m.name == requested_method_name}
          if entries.size == 1
            method = @ri_reader.get_method(entries[0])
            @display.display_method_info(method)
          else
            @display.display_method_list(methods)
          end
        end
      end

report_missing_documentation(paths)

Couldn‘t find documentation in paths, so tell the user what to do

[Source]

    # File rdoc/ri/ri_driver.rb, line 35
      def report_missing_documentation(paths)
        STDERR.puts "No ri documentation found in:"
        paths.each do |d|
          STDERR.puts "     #{d}"
        end
        STDERR.puts "\nWas rdoc run to create documentation?\n\n"
        RDoc::usage("Installing Documentation")
      end

[Validate]