| Class | RDoc::RI::DefaultDisplay |
| In: |
ri/display.rb
|
| Parent: | Object |
A paging display module. Uses the RDoc::RI::Formatter class to do the actual presentation.
# File ri/display.rb, line 35
35: def initialize(formatter, width, use_stdout)
36: @use_stdout = use_stdout
37: @formatter = formatter.new $stdout, width, " "
38: end
# File ri/display.rb, line 56
56: def display_class_info(klass, ri_reader)
57: page do
58: superclass = klass.superclass_string
59:
60: if superclass
61: superclass = " < " + superclass
62: else
63: superclass = ""
64: end
65:
66: @formatter.draw_line(klass.display_name + ": " +
67: klass.full_name + superclass)
68:
69: display_flow(klass.comment)
70: @formatter.draw_line
71:
72: unless klass.includes.empty?
73: @formatter.blankline
74: @formatter.display_heading("Includes:", 2, "")
75: incs = []
76: klass.includes.each do |inc|
77: inc_desc = ri_reader.find_class_by_name(inc.name)
78: if inc_desc
79: str = inc.name + "("
80: str << inc_desc.instance_methods.map{|m| m.name}.join(", ")
81: str << ")"
82: incs << str
83: else
84: incs << inc.name
85: end
86: end
87: @formatter.wrap(incs.sort.join(', '))
88: end
89:
90: unless klass.constants.empty?
91: @formatter.blankline
92: @formatter.display_heading("Constants:", 2, "")
93: len = 0
94: klass.constants.each { |c| len = c.name.length if c.name.length > len }
95: len += 2
96: klass.constants.each do |c|
97: @formatter.wrap(c.value,
98: @formatter.indent+((c.name+":").ljust(len)))
99: end
100: end
101:
102: unless klass.class_methods.empty?
103: @formatter.blankline
104: @formatter.display_heading("Class methods:", 2, "")
105: @formatter.wrap(klass.class_methods.map{|m| m.name}.sort.join(', '))
106: end
107:
108: unless klass.class_method_extensions.empty?
109: @formatter.blankline
110: @formatter.display_heading("Class Method Extensions:", 2, "")
111: @formatter.wrap(klass.class_method_extensions.map{|m| m.name}.sort.join(', '))
112: end
113:
114: unless klass.instance_methods.empty?
115: @formatter.blankline
116: @formatter.display_heading("Instance methods:", 2, "")
117: @formatter.wrap(klass.instance_methods.map{|m| m.name}.sort.join(', '))
118: end
119:
120: unless klass.instance_method_extensions.empty?
121: @formatter.blankline
122: @formatter.display_heading("Instance Method Extensions:", 2, "")
123: @formatter.wrap(klass.instance_method_extensions.map{|m| m.name}.sort.join(', '))
124: end
125:
126: unless klass.attributes.empty?
127: @formatter.blankline
128: @formatter.wrap("Attributes:", "")
129: @formatter.wrap(klass.attributes.map{|a| a.name}.sort.join(', '))
130: end
131: end
132: end
# File ri/display.rb, line 145
145: def display_class_list(namespaces)
146: page do
147: @formatter.raw_print_line("More than one class or module matched your request. You can refine")
148: @formatter.raw_print_line("your search by asking for information on one of:\n\n")
149: @formatter.wrap(namespaces.map {|m| m.full_name}.join(", "))
150: end
151: end
# File ri/display.rb, line 223
223: def display_flow(flow)
224: if !flow || flow.empty?
225: @formatter.wrap("(no description...)")
226: else
227: @formatter.display_flow(flow)
228: end
229: end
# File ri/display.rb, line 40
40: def display_method_info(method)
41: page do
42: @formatter.draw_line(method.full_name)
43: display_params(method)
44: @formatter.draw_line
45: display_flow(method.comment)
46: if method.aliases && !method.aliases.empty?
47: @formatter.blankline
48: aka = "(also known as "
49: aka << method.aliases.map {|a| a.name }.join(", ")
50: aka << ")"
51: @formatter.wrap(aka)
52: end
53: end
54: end
Display a list of method names
# File ri/display.rb, line 137
137: def display_method_list(methods)
138: page do
139: @formatter.raw_print_line("More than one method matched your request. You can refine")
140: @formatter.raw_print_line("your search by asking for information on one of:\n\n")
141: @formatter.wrap(methods.map {|m| m.full_name} .join(", "))
142: end
143: end
# File ri/display.rb, line 203
203: def display_params(method)
204: params = method.params
205:
206: if params[0,1] == "("
207: if method.is_singleton
208: params = method.full_name + params
209: else
210: params = method.name + params
211: end
212: end
213: params.split(/\n/).each do |p|
214: @formatter.wrap(p)
215: @formatter.break_to_newline
216: end
217: if method.source_path then
218: @formatter.blankline
219: @formatter.wrap("Extension from #{method.source_path}")
220: end
221: end
# File ri/display.rb, line 153
153: def list_known_classes(classes)
154: if classes.empty?
155: warn_no_database
156: else
157: page do
158: @formatter.draw_line("Known classes and modules")
159: @formatter.blankline
160: @formatter.wrap(classes.sort.join(", "))
161: end
162: end
163: end
# File ri/display.rb, line 165
165: def list_known_names(names)
166: if names.empty?
167: warn_no_database
168: else
169: page do
170: names.each {|n| @formatter.raw_print_line(n)}
171: end
172: end
173: end
# File ri/display.rb, line 177
177: def page
178: if pager = setup_pager then
179: begin
180: orig_output = @formatter.output
181: @formatter.output = pager
182: yield
183: ensure
184: @formatter.output = orig_output
185: pager.close
186: end
187: else
188: yield
189: end
190: rescue Errno::EPIPE
191: end
# File ri/display.rb, line 193
193: def setup_pager
194: unless @use_stdout then
195: for pager in [ ENV['PAGER'], "less", "more", 'pager' ].compact.uniq
196: return IO.popen(pager, "w") rescue nil
197: end
198: @use_stdout = true
199: nil
200: end
201: end
# File ri/display.rb, line 231
231: def warn_no_database
232: puts "No ri data found"
233: puts
234: puts "If you've installed Ruby yourself, you need to generate documentation using:"
235: puts
236: puts " make install-doc"
237: puts
238: puts "from the same place you ran `make` to build ruby."
239: puts
240: puts "If you installed Ruby from a packaging system, then you may need to"
241: puts "install an additional package, or ask the packager to enable ri generation."
242: end