| Class | List |
| In: |
lib/optparse.rb
|
| Parent: | Object |
Simple option list providing mapping from short and/or long option string to OptionParser::Switch and mapping from acceptable argument to matching pattern and converter pair. Also provides summary feature.
| atype | [R] | Map from acceptable argument types to pattern and converter pairs. |
| list | [R] | List of all switches and summary string. |
| long | [R] | Map from long style option switches to actual switch objects. |
| short | [R] | Map from short style option switches to actual switch objects. |
Just initializes all instance variables.
# File lib/optparse.rb, line 520
520: def initialize
521: @atype = {}
522: @short = OptionMap.new
523: @long = OptionMap.new
524: @list = []
525: end
See OptionParser.accept.
# File lib/optparse.rb, line 530
530: def accept(t, pat = /.*/nm, &block)
531: if pat
532: pat.respond_to?(:match) or raise TypeError, "has no `match'"
533: else
534: pat = t if t.respond_to?(:match)
535: end
536: unless block
537: block = pat.method(:convert).to_proc if pat.respond_to?(:convert)
538: end
539: @atype[t] = [pat, block]
540: end
Appends switch at the tail of the list, and associates short, long and negated long options. Arguments are:
| switch: | OptionParser::Switch instance to be inserted. |
| short_opts: | List of short style options. |
| long_opts: | List of long style options. |
| nolong_opts: | List of long style options with "no-" prefix. |
append(switch, short_opts, long_opts, nolong_opts)
# File lib/optparse.rb, line 594
594: def append(*args)
595: update(*args)
596: @list.push(args[0])
597: end
Searches list id for opt and the optional patterns for completion pat. If icase is true, the search is case insensitive. The result is returned or yielded if a block is given. If it isn‘t found, nil is returned.
# File lib/optparse.rb, line 616
616: def complete(id, opt, icase = false, *pat, &block)
617: __send__(id).complete(opt, icase, *pat, &block)
618: end
Iterates over each option, passing the option to the block.
# File lib/optparse.rb, line 623
623: def each_option(&block)
624: list.each(&block)
625: end
Inserts switch at the head of the list, and associates short, long and negated long options. Arguments are:
| switch: | OptionParser::Switch instance to be inserted. |
| short_opts: | List of short style options. |
| long_opts: | List of long style options. |
| nolong_opts: | List of long style options with "no-" prefix. |
prepend(switch, short_opts, long_opts, nolong_opts)
# File lib/optparse.rb, line 578
578: def prepend(*args)
579: update(*args)
580: @list.unshift(args[0])
581: end
See OptionParser.reject.
# File lib/optparse.rb, line 545
545: def reject(t)
546: @atype.delete(t)
547: end
Searches key in id list. The result is returned or yielded if a block is given. If it isn‘t found, nil is returned.
# File lib/optparse.rb, line 603
603: def search(id, key)
604: if list = __send__(id)
605: val = list.fetch(key) {return nil}
606: block_given? ? yield(val) : val
607: end
608: end
Creates the summary table, passing each line to the block (without newline). The arguments args are passed along to the summarize method which is called on every option.
# File lib/optparse.rb, line 632
632: def summarize(*args, &block)
633: sum = []
634: list.reverse_each do |opt|
635: if opt.respond_to?(:summarize) # perhaps OptionParser::Switch
636: s = []
637: opt.summarize(*args) {|l| s << l}
638: sum.concat(s.reverse)
639: elsif !opt or opt.empty?
640: sum << ""
641: elsif opt.respond_to?(:each_line)
642: sum.concat([*opt.each_line].reverse)
643: else
644: sum.concat([*opt.each].reverse)
645: end
646: end
647: sum.reverse_each(&block)
648: end
Adds sw according to sopts, lopts and nlopts.
| sw: | OptionParser::Switch instance to be added. |
| sopts: | Short style option list. |
| lopts: | Long style option list. |
| nlopts: | Negated long style options list. |
# File lib/optparse.rb, line 557
557: def update(sw, sopts, lopts, nsw = nil, nlopts = nil)
558: o = nil
559: sopts.each {|o| @short[o] = sw} if sopts
560: lopts.each {|o| @long[o] = sw} if lopts
561: nlopts.each {|o| @long[o] = nsw} if nsw and nlopts
562: used = @short.invert.update(@long.invert)
563: @list.delete_if {|o| Switch === o and !used[o]}
564: end