# class OptionParser::List

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.

### Attributes

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.

### Public Class Methods

new() click to toggle source

Just initializes all instance variables.

    # File lib/optparse.rb, line 741
    def initialize
      @atype = {}
      @short = OptionMap.new
      @long = OptionMap.new
      @list = []
    end

### Public Instance Methods

accept(t, pat = /.*/m, &block) click to toggle source

See OptionParser#accept.

    # File lib/optparse.rb, line 751
    def accept(t, pat = /.*/m, &block)
      if pat
        pat.respond_to?(:match) or
          raise TypeError, "has no `match'", ParseError.filter_backtrace(caller(2))
      else
        pat = t if t.respond_to?(:match)
      end
      unless block
        block = pat.method(:convert).to_proc if pat.respond_to?(:convert)
      end
      @atype[t] = [pat, block]
    end

append(*args) click to toggle source

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 815
    def append(*args)
      update(*args)
      @list.push(args[0])
    end

complete(id, opt, icase = false, *pat, &block) click to toggle source

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 837
    def complete(id, opt, icase = false, *pat, &block)
      __send__(id).complete(opt, icase, *pat, &block)
    end

each_option(&block) click to toggle source

Iterates over each option, passing the option to the `block`.

    # File lib/optparse.rb, line 844
    def each_option(&block)
      list.each(&block)
    end

prepend(*args) click to toggle source

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 799
    def prepend(*args)
      update(*args)
      @list.unshift(args[0])
    end

reject(t) click to toggle source

See OptionParser#reject.

    # File lib/optparse.rb, line 767
    def reject(t)
      @atype.delete(t)
    end

search(id, key) { |val| ... } click to toggle source

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 824
    def search(id, key)
      if list = __send__(id)
        val = list.fetch(key) {return nil}
        block_given? ? yield(val) : val
      end
    end

summarize(*args, &block) click to toggle source

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 853
    def summarize(*args, &block)
      sum = []
      list.reverse_each do |opt|
        if opt.respond_to?(:summarize) # perhaps OptionParser::Switch
          s = []
          opt.summarize(*args) {|l| s << l}
          sum.concat(s.reverse)
        elsif !opt or opt.empty?
          sum << ""
        elsif opt.respond_to?(:each_line)
          sum.concat([*opt.each_line].reverse)
        else
          sum.concat([*opt.each].reverse)
        end
      end
      sum.reverse_each(&block)
    end

### Private Instance Methods

update(sw, sopts, lopts, nsw = nil, nlopts = nil) click to toggle source

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 779
    def update(sw, sopts, lopts, nsw = nil, nlopts = nil)
      sopts.each {|o| @short[o] = sw} if sopts
      lopts.each {|o| @long[o] = sw} if lopts
      nlopts.each {|o| @long[o] = nsw} if nsw and nlopts
      used = @short.invert.update(@long.invert)
      @list.delete_if {|o| Switch === o and !used[o]}
    end