In Files

  • rdoc/ri/display.rb

Files

Class/Module Index [+]

Quicksearch

RDoc::RI::DefaultDisplay

A paging display module. Uses the RDoc::RI::Formatter class to do the actual presentation.

Public Class Methods

new(formatter, width, use_stdout, output = $stdout) click to toggle source
 
               # File rdoc/ri/display.rb, line 45
def initialize(formatter, width, use_stdout, output = $stdout)
  @use_stdout = use_stdout
  @formatter = formatter.new output, width, "     "
end
            

Public Instance Methods

display_class_info(klass) click to toggle source

Display information about klass. Fetches additional information from ri_reader as necessary.

 
               # File rdoc/ri/display.rb, line 54
def display_class_info(klass)
  page do
    superclass = klass.superclass

    if superclass
      superclass = " < " + superclass
    else
      superclass = ""
    end

    @formatter.draw_line(klass.display_name + ": " +
                         klass.full_name + superclass)

    display_flow(klass.comment)
    @formatter.draw_line

    unless klass.includes.empty?
      @formatter.blankline
      @formatter.display_heading("Includes:", 2, "")
      incs = []

      klass.includes.each do |inc|
        incs << inc.name
      end

      @formatter.wrap(incs.sort.join(', '))
    end

    unless klass.constants.empty?
      @formatter.blankline
      @formatter.display_heading("Constants:", 2, "")

      constants = klass.constants.sort_by { |constant| constant.name }

      constants.each do |constant|
        @formatter.wrap "#{constant.name} = #{constant.value}"
        if constant.comment then
          @formatter.indent do
            @formatter.display_flow constant.comment
          end
        else
          @formatter.break_to_newline
        end
      end
    end

    unless klass.attributes.empty? then
      @formatter.blankline
      @formatter.display_heading 'Attributes:', 2, ''

      attributes = klass.attributes.sort_by { |attribute| attribute.name }

      attributes.each do |attribute|
        if attribute.comment then
          @formatter.wrap "#{attribute.name} (#{attribute.rw}):"
          @formatter.indent do
            @formatter.display_flow attribute.comment
          end
        else
          @formatter.wrap "#{attribute.name} (#{attribute.rw})"
          @formatter.break_to_newline
        end
      end
    end

    return display_class_method_list(klass)
  end
end
            
display_flow(flow) click to toggle source

Display an Array of RDoc::Markup::Flow objects, flow.

 
               # File rdoc/ri/display.rb, line 231
def display_flow(flow)
  if flow and not flow.empty? then
    @formatter.display_flow flow
  else
    @formatter.wrap '[no description]'
  end
end
            
display_method_info(method) click to toggle source

Display information about method.

 
               # File rdoc/ri/display.rb, line 242
def display_method_info(method)
  page do
    @formatter.draw_line(method.full_name)
    display_params(method)

    @formatter.draw_line
    display_flow(method.comment)

    if method.aliases and not method.aliases.empty? then
      @formatter.blankline
      aka = "(also known as #{method.aliases.map { |a| a.name }.join(', ')})"
      @formatter.wrap aka
    end
  end
end
            
display_method_list(methods) click to toggle source

Display the list of methods.

 
               # File rdoc/ri/display.rb, line 261
def display_method_list(methods)
  page do
    @formatter.wrap "More than one method matched your request.  You can refine your search by asking for information on one of:"
    @formatter.blankline

    methods.each do |method|
      @formatter.raw_print_line "#{method.full_name} [#{method.source_path}]\n"
    end
  end
end
            
display_method_list_choice(methods) click to toggle source

Display a list of methods and allow the user to select one of them.

 
               # File rdoc/ri/display.rb, line 275
def display_method_list_choice(methods)
  page do
    @formatter.wrap "More than one method matched your request.  Please choose one of the possible matches."
    @formatter.blankline

    methods.each_with_index do |method, index|
      @formatter.raw_print_line "%3d %s [%s]\n" % [index + 1, method.full_name, method.source_path]
    end
    
    @formatter.raw_print_line ">> "
    
    choice = $stdin.gets.strip!

    if(choice == '')
      return
    end

    choice = choice.to_i

    if ((choice == 0) || (choice > methods.size)) then
      @formatter.raw_print_line "Invalid choice!\n"
    else
      method = methods[choice - 1] 
      display_method_info(method)
    end
  end
end
            
display_params(method) click to toggle source

Display the params for method.

 
               # File rdoc/ri/display.rb, line 306
def display_params(method)
  params = method.params

  if params[0,1] == "(" then
    if method.is_singleton
      params = method.full_name + params
    else
      params = method.name + params
    end
  end

  params.split(/\n/).each do |param|
    @formatter.wrap param
    @formatter.break_to_newline
  end

  @formatter.blankline
  @formatter.wrap("From #{method.source_path}")
end
            
get_class_method_choice(method_map) click to toggle source

Given a Hash mapping a class’ methods to method types (returned by display_class_method_list), this method allows the user to choose one of the methods.

 
               # File rdoc/ri/display.rb, line 128
def get_class_method_choice(method_map)
  if CAN_USE_READLINE
    # prepare abbreviations for tab completion
    abbreviations = method_map.keys.abbrev
    Readline.completion_proc = proc do |string| 
      abbreviations.values.uniq.grep(/^#{string}/)
    end
  end
  
  @formatter.raw_print_line "\nEnter the method name you want.\n"
  @formatter.raw_print_line "Class methods can be preceeded by '::' and instance methods by '#'.\n"

  if CAN_USE_READLINE
    @formatter.raw_print_line "You can use tab to autocomplete.\n"
    @formatter.raw_print_line "Enter a blank line to exit.\n"
    
    choice_string = Readline.readline(">> ").strip
  else
    @formatter.raw_print_line "Enter a blank line to exit.\n"
    @formatter.raw_print_line ">> "
    choice_string = $stdin.gets.strip
  end
  
  if choice_string == ''
    return nil
  else
    class_or_instance = method_map[choice_string]

    if class_or_instance
      # If the user's choice is not preceeded by a '::' or a '#', figure
      # out whether they want a class or an instance method and decorate
      # the choice appropriately.
      if(choice_string =~ /^[a-zA-Z]/)
        if(class_or_instance == :class)
          choice_string = "::#{choice_string}"
        else
          choice_string = "##{choice_string}"
        end
      end

      return choice_string
    else
      @formatter.raw_print_line "No method matched '#{choice_string}'.\n"
      return nil
    end
  end
end
            
list_known_classes(classes) click to toggle source

List the classes in classes.

 
               # File rdoc/ri/display.rb, line 329
def list_known_classes(classes)
  if classes.empty?
    warn_no_database
  else
    page do
      @formatter.draw_line "Known classes and modules"
      @formatter.blankline

      @formatter.wrap classes.sort.join(', ')
    end
  end
end
            
page() click to toggle source

Paginates output through a pager program.

 
               # File rdoc/ri/display.rb, line 345
def page
  if pager = setup_pager then
    begin
      orig_output = @formatter.output
      @formatter.output = pager
      yield
    ensure
      @formatter.output = orig_output
      pager.close
    end
  else
    yield
  end
rescue Errno::EPIPE
end
            
setup_pager() click to toggle source

Sets up a pager program to pass output through.

 
               # File rdoc/ri/display.rb, line 364
def setup_pager
  unless @use_stdout then
    for pager in [ ENV['PAGER'], "less", "more", 'pager' ].compact.uniq
      return IO.popen(pager, "w") rescue nil
    end
    @use_stdout = true
    nil
  end
end
            
warn_no_database() click to toggle source

Displays a message that describes how to build RI data.

 
               # File rdoc/ri/display.rb, line 377
def warn_no_database
  output = @formatter.output

  output.puts "No ri data found"
  output.puts
  output.puts "If you've installed Ruby yourself, you need to generate documentation using:"
  output.puts
  output.puts "  make install-doc"
  output.puts
  output.puts "from the same place you ran `make` to build ruby."
  output.puts
  output.puts "If you installed Ruby from a packaging system, then you may need to"
  output.puts "install an additional package, or ask the packager to enable ri generation."
end
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus