Class DefaultDisplay
In: ri/ri_display.rb
Parent: Object

A paging display module. Uses the ri_formatter class to do the actual presentation

Methods

Included Modules

RiDisplay

Public Class methods

[Source]

    # File ri/ri_display.rb, line 41
41:   def initialize(options)
42:     @options = options
43:     @formatter = @options.formatter.new(@options, "     ")
44:   end

Public Instance methods

[Source]

     # File ri/ri_display.rb, line 76
 76:   def display_class_info(klass, ri_reader)
 77:     page do 
 78:       superclass = klass.superclass_string
 79:       
 80:       if superclass
 81:         superclass = " < " + superclass
 82:       else
 83:         superclass = ""
 84:       end
 85:       
 86:       @formatter.draw_line(klass.display_name + ": " +
 87:                            klass.full_name + superclass)
 88:       
 89:       display_flow(klass.comment)
 90:       @formatter.draw_line 
 91:     
 92:       unless klass.includes.empty?
 93:         @formatter.blankline
 94:         @formatter.display_heading("Includes:", 2, "")
 95:         incs = []
 96:         klass.includes.each do |inc|
 97:           inc_desc = ri_reader.find_class_by_name(inc.name)
 98:           if inc_desc
 99:             str = inc.name + "("
100:             str << inc_desc.instance_methods.map{|m| m.name}.join(", ")
101:             str << ")"
102:             incs << str
103:           else
104:             incs << inc.name
105:           end
106:       end
107:         @formatter.wrap(incs.sort.join(', '))
108:       end
109:       
110:       unless klass.constants.empty?
111:         @formatter.blankline
112:         @formatter.display_heading("Constants:", 2, "")
113:         len = 0
114:         klass.constants.each { |c| len = c.name.length if c.name.length > len }
115:         len += 2
116:         klass.constants.each do |c|
117:           @formatter.wrap(c.value, 
118:                           @formatter.indent+((c.name+":").ljust(len)))
119:         end 
120:       end
121:       
122:       unless klass.class_methods.empty?
123:         @formatter.blankline
124:         @formatter.display_heading("Class methods:", 2, "")
125:         @formatter.wrap(klass.class_methods.map{|m| m.name}.sort.join(', '))
126:       end
127:       
128:       unless klass.instance_methods.empty?
129:         @formatter.blankline
130:         @formatter.display_heading("Instance methods:", 2, "")
131:         @formatter.wrap(klass.instance_methods.map{|m| m.name}.sort.join(', '))
132:       end
133:       
134:       unless klass.attributes.empty?
135:         @formatter.blankline
136:         @formatter.wrap("Attributes:", "")
137:         @formatter.wrap(klass.attributes.map{|a| a.name}.sort.join(', '))
138:       end
139:     end
140:   end

[Source]

     # File ri/ri_display.rb, line 156
156:   def display_class_list(namespaces)
157:     page do
158:       puts "More than one class or module matched your request. You can refine"
159:       puts "your search by asking for information on one of:\n\n"
160:       @formatter.wrap(namespaces.map {|m| m.full_name}.join(", "))
161:     end
162:   end

[Source]

     # File ri/ri_display.rb, line 242
242:   def display_flow(flow)
243:     if !flow || flow.empty?
244:       @formatter.wrap("(no description...)")
245:     else
246:       @formatter.display_flow(flow)
247:     end
248:   end

[Source]

    # File ri/ri_display.rb, line 58
58:   def display_method_info(method)
59:     page do
60:       @formatter.draw_line(method.full_name)
61:       display_params(method)
62:       @formatter.draw_line
63:       display_flow(method.comment)
64:       if method.aliases && !method.aliases.empty?
65:         @formatter.blankline
66:         aka = "(also known as "
67:         aka << method.aliases.map {|a| a.name }.join(", ") 
68:         aka << ")"
69:         @formatter.wrap(aka)
70:       end
71:     end
72:   end

Display a list of method names

[Source]

     # File ri/ri_display.rb, line 146
146:   def display_method_list(methods)
147:     page do
148:       puts "More than one method matched your request. You can refine"
149:       puts "your search by asking for information on one of:\n\n"
150:       @formatter.wrap(methods.map {|m| m.full_name} .join(", "))
151:     end
152:   end

[Source]

     # File ri/ri_display.rb, line 223
223:   def display_params(method)
224: 
225:     params = method.params
226: 
227:     if params[0,1] == "("
228:       if method.is_singleton
229:         params = method.full_name + params
230:       else
231:         params = method.name + params
232:       end
233:     end
234:     params.split(/\n/).each do |p|
235:       @formatter.wrap(p) 
236:       @formatter.break_to_newline
237:     end
238:   end

[Source]

    # File ri/ri_display.rb, line 49
49:   def display_usage
50:     page do
51:       RI::Options::OptionList.usage(short_form=true)
52:     end
53:   end

[Source]

     # File ri/ri_display.rb, line 166
166:   def list_known_classes(classes)
167:     if classes.empty?
168:       warn_no_database
169:     else
170:       page do 
171:         @formatter.draw_line("Known classes and modules")
172:         @formatter.blankline
173:         @formatter.wrap(classes.sort.join(", "))
174:       end
175:     end
176:   end

[Source]

     # File ri/ri_display.rb, line 180
180:   def list_known_names(names)
181:     if names.empty?
182:       warn_no_database
183:     else
184:       page do 
185:         names.each {|n| @formatter.raw_print_line(n)}
186:       end
187:     end
188:   end

[Source]

     # File ri/ri_display.rb, line 196
196:   def page
197:     return yield unless pager = setup_pager
198:     begin
199:       save_stdout = STDOUT.clone
200:       STDOUT.reopen(pager)
201:       yield
202:     ensure
203:       STDOUT.reopen(save_stdout)
204:       save_stdout.close
205:       pager.close
206:     end
207:   end

[Source]

     # File ri/ri_display.rb, line 211
211:   def setup_pager
212:     unless @options.use_stdout
213:       for pager in [ ENV['PAGER'], "less", "more", 'pager' ].compact.uniq
214:         return IO.popen(pager, "w") rescue nil
215:       end
216:       @options.use_stdout = true
217:       nil
218:     end
219:   end

[Source]

     # File ri/ri_display.rb, line 252
252:   def warn_no_database
253:     puts "Before using ri, you need to generate documentation"
254:     puts "using 'rdoc' with the --ri option"
255:   end

[Validate]