A paging display module. Uses the RDoc::RI::Formatter class to do the actual presentation.
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 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 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 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 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 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
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 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
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
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
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 see Improve the docs, or visit Documenting-ruby.org.