Class Options
In: options.rb
Parent: Object

Methods

Included Modules

Singleton

Classes and Modules

Module Options::OptionList

Attributes

all_one_file  [R]  should the output be placed into a single file
charset  [R]  character-set
css  [R]  URL of stylesheet
diagram  [R]  should diagrams be drawn
exclude  [RW]  files matching this pattern will be excluded
extra_accessor_flags  [R] 
extra_accessors  [R]  pattern for additional attr_... style methods
fileboxes  [R]  should we draw fileboxes in diagrams
files  [R]  and the list of files to be processed
generator  [RW]  description of the output generator (set with the -fmt option
ignore_case  [R]  The case of names of classes or modules or methods are ignored
image_format  [R]  image format for diagrams
include_line_numbers  [R]  include line numbers in the source listings
inline_source  [R]  should source code be included inline, or displayed in a popup
main_page  [RW]  name of the file, class or module to display in the initial index page (if not specified the first file we encounter is used)
merge  [R]  merge into classes of the name name when generating ri
op_dir  [RW]  the name of the output directory
op_name  [R]  the name to use for the output
promiscuous  [R]  Are we promiscuous about showing module contents across multiple files
quiet  [R]  Don‘t display progress as we process the files
rdoc_include  [R]  array of directories to search for files to satisfy an :include:
show_all  [RW]  include private and protected methods in the output
show_hash  [R]  include the ’#’ at the front of hyperlinked instance method names
tab_width  [R]  the number of columns in a tab
template  [R]  template to be used when generating output
webcvs  [R]  URL of web cvs frontend

Public Instance methods

Check that the right version of ‘dot’ is available. Unfortuately this doesn‘t work correctly under Windows NT, so we‘ll bypass the test under Windows

[Source]

     # File options.rb, line 546
546:   def check_diagram
547:     return if RUBY_PLATFORM =~ /win/
548: 
549:     ok = false
550:     ver = nil
551:     IO.popen("dot -V 2>&1") do |io|
552:       ver = io.read
553:       if ver =~ /dot\s+version(?:\s+gviz)?\s+(\d+)\.(\d+)/
554:         ok = ($1.to_i > 1) || ($1.to_i == 1 && $2.to_i >= 8)
555:       end
556:     end
557:     unless ok
558:       if ver =~ /^dot version/
559:         $stderr.puts "Warning: You may need dot V1.8.6 or later to use\n",
560:           "the --diagram option correctly. You have:\n\n   ",
561:           ver,
562:           "\nDiagrams might have strange background colors.\n\n"
563:       else
564:         $stderr.puts "You need the 'dot' program to produce diagrams.",
565:           "(see http://www.research.att.com/sw/tools/graphviz/)\n\n"
566:         exit
567:       end
568: #      exit
569:     end
570:   end

Check that the files on the command line exist

[Source]

     # File options.rb, line 574
574:   def check_files
575:     @files.each do |f|
576:       stat = File.stat f rescue error("File not found: #{f}")
577:       error("File '#{f}' not readable") unless stat.readable?
578:     end
579:   end

[Source]

     # File options.rb, line 581
581:   def error(str)
582:     $stderr.puts str
583:     exit(1)
584:   end

Parse command line options. We‘re passed a hash containing output generators, keyed by the generator name

[Source]

     # File options.rb, line 349
349:   def parse(argv, generators)
350:     old_argv = ARGV.dup
351:     begin
352:       ARGV.replace(argv)
353:       @op_dir = "doc"
354:       @op_name = nil
355:       @show_all = false
356:       @main_page = nil
357:       @marge     = false
358:       @exclude   = []
359:       @quiet = false
360:       @generator_name = 'html'
361:       @generator = generators[@generator_name]
362:       @rdoc_include = []
363:       @title = nil
364:       @template = nil
365:       @diagram = false
366:       @fileboxes = false
367:       @show_hash = false
368:       @image_format = 'png'
369:       @inline_source = false
370:       @all_one_file  = false
371:       @tab_width = 8
372:       @include_line_numbers = false
373:       @extra_accessor_flags = {}
374:       @promiscuous = false
375:       @ignore_case = false
376: 
377:       @css = nil
378:       @webcvs = nil
379: 
380:       @charset = case $KCODE
381:                  when /^S/i
382:                    'Shift_JIS'
383:                  when /^E/i
384:                    'EUC-JP'
385:                  else
386:                    'iso-8859-1'
387:                  end
388: 
389:       accessors = []
390: 
391:       go = GetoptLong.new(*OptionList.options)
392:       go.quiet = true
393: 
394:       go.each do |opt, arg|
395:         case opt
396:         when "--all"           then @show_all      = true
397:         when "--charset"       then @charset       = arg
398:         when "--debug"         then $DEBUG         = true
399:         when "--exclude"       then @exclude       << Regexp.new(arg)
400:         when "--inline-source" then @inline_source = true
401:         when "--line-numbers"  then @include_line_numbers = true
402:         when "--main"          then @main_page     = arg
403:         when "--merge"         then @merge         = true
404:         when "--one-file"      then @all_one_file  = @inline_source = true
405:         when "--op"            then @op_dir        = arg
406:         when "--opname"        then @op_name       = arg
407:         when "--promiscuous"   then @promiscuous   = true
408:         when "--quiet"         then @quiet         = true
409:         when "--show-hash"     then @show_hash     = true
410:         when "--style"         then @css           = arg
411:         when "--template"      then @template      = arg
412:         when "--title"         then @title         = arg
413:         when "--webcvs"        then @webcvs        = arg
414:         when "--ignore-case"   then @ignore_case   = true
415: 
416:         when "--accessor" 
417:           arg.split(/,/).each do |accessor|
418:             if accessor =~ /^(\w+)(=(.*))?$/
419:               accessors << $1
420:               @extra_accessor_flags[$1] = $3
421:             end
422:           end
423: 
424:         when "--diagram"
425:           check_diagram
426:           @diagram = true
427: 
428:         when "--fileboxes"
429:           @fileboxes = true if @diagram
430: 
431:         when "--fmt"
432:           @generator_name = arg.downcase
433:           setup_generator(generators)
434: 
435:         when "--help"      
436:           OptionList.usage(generators.keys)
437: 
438:         when "--help-output"      
439:           OptionList.help_output
440: 
441:         when "--image-format"
442:           if ['gif', 'png', 'jpeg', 'jpg'].include?(arg)
443:             @image_format = arg
444:           else
445:             raise GetoptLong::InvalidOption.new("unknown image format: #{arg}")
446:           end
447: 
448:         when "--include"   
449:           @rdoc_include.concat arg.split(/\s*,\s*/)
450: 
451:         when "--ri", "--ri-site", "--ri-system"
452:           @generator_name = "ri"
453:           @op_dir = case opt
454:                     when "--ri" then RI::Paths::HOMEDIR 
455:                     when "--ri-site" then RI::Paths::SITEDIR
456:                     when "--ri-system" then RI::Paths::SYSDIR
457:                     else fail opt
458:                     end
459:           setup_generator(generators)
460: 
461:         when "--tab-width"
462:           begin
463:             @tab_width     = Integer(arg)
464:           rescue 
465:             $stderr.puts "Invalid tab width: '#{arg}'"
466:             exit 1
467:           end
468: 
469:         when "--extension"
470:           new, old = arg.split(/=/, 2)
471:           OptionList.error("Invalid parameter to '-E'") unless new && old
472:           unless RDoc::ParserFactory.alias_extension(old, new)
473:             OptionList.error("Unknown extension .#{old} to -E")
474:           end
475: 
476:         when "--version"
477:           puts VERSION_STRING
478:           exit
479:         end
480: 
481:       end
482: 
483:       @files = ARGV.dup
484: 
485:       @rdoc_include << "." if @rdoc_include.empty?
486: 
487:       if @exclude.empty?
488:         @exclude = nil
489:       else
490:         @exclude = Regexp.new(@exclude.join("|"))
491:       end
492: 
493:       check_files
494: 
495:       # If no template was specified, use the default
496:       # template for the output formatter
497: 
498:       @template ||= @generator_name
499: 
500:       # Generate a regexp from the accessors
501:       unless accessors.empty?
502:         re = '^(' + accessors.map{|a| Regexp.quote(a)}.join('|') + ')$' 
503:         @extra_accessors = Regexp.new(re)
504:       end
505: 
506:     rescue GetoptLong::InvalidOption, GetoptLong::MissingArgument => error
507:       OptionList.error(error.message)
508: 
509:     ensure
510:       ARGV.replace(old_argv)
511:     end
512:   end

Set up an output generator for the format in @generator_name

[Source]

     # File options.rb, line 530
530:   def setup_generator(generators)
531:     @generator = generators[@generator_name]
532:     if !@generator
533:       OptionList.error("Invalid output formatter")
534:     end
535:     
536:     if @generator_name == "xml"
537:       @all_one_file = true
538:       @inline_source = true
539:     end
540:   end

[Source]

     # File options.rb, line 515
515:   def title
516:     @title ||= "RDoc Documentation"
517:   end

Set the title, but only if not already set. This means that a title set from the command line trumps one set in a source file

[Source]

     # File options.rb, line 522
522:   def title=(string)
523:     @title ||= string
524:   end

[Validate]