Class: OptionParser::List

Inherits:
Object
  • Object
show all
Defined in:
lib/optparse.rb

Overview

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.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeList

Just initializes all instance variables.


560
561
562
563
564
565
# File 'lib/optparse.rb', line 560

def initialize
  @atype = {}
  @short = OptionMap.new
  @long = OptionMap.new
  @list = []
end

Instance Attribute Details

#atypeObject (readonly)

Map from acceptable argument types to pattern and converter pairs.


546
547
548
# File 'lib/optparse.rb', line 546

def atype
  @atype
end

#listObject (readonly)

List of all switches and summary string.


555
556
557
# File 'lib/optparse.rb', line 555

def list
  @list
end

#longObject (readonly)

Map from long style option switches to actual switch objects.


552
553
554
# File 'lib/optparse.rb', line 552

def long
  @long
end

#shortObject (readonly)

Map from short style option switches to actual switch objects.


549
550
551
# File 'lib/optparse.rb', line 549

def short
  @short
end

Instance Method Details

#accept(t, pat = /.*/m, &block) ⇒ Object

See OptionParser.accept.


570
571
572
573
574
575
576
577
578
579
580
581
# File 'lib/optparse.rb', line 570

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

#add_banner(to) ⇒ Object

:nodoc:


690
691
692
693
694
695
696
697
# File 'lib/optparse.rb', line 690

def add_banner(to)  # :nodoc:
  list.each do |opt|
    if opt.respond_to?(:add_banner)
      opt.add_banner(to)
    end
  end
  to
end

#append(*args) ⇒ Object

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)

634
635
636
637
# File 'lib/optparse.rb', line 634

def append(*args)
  update(*args)
  @list.push(args[0])
end

#complete(id, opt, icase = false, *pat, &block) ⇒ Object

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.


656
657
658
# File 'lib/optparse.rb', line 656

def complete(id, opt, icase = false, *pat, &block)
  __send__(id).complete(opt, icase, *pat, &block)
end

#compsys(*args, &block) ⇒ Object

:nodoc:


699
700
701
702
703
704
705
# File 'lib/optparse.rb', line 699

def compsys(*args, &block)  # :nodoc:
  list.each do |opt|
    if opt.respond_to?(:compsys)
      opt.compsys(*args, &block)
    end
  end
end

#each_option(&block) ⇒ Object

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


663
664
665
# File 'lib/optparse.rb', line 663

def each_option(&block)
  list.each(&block)
end

#prepend(*args) ⇒ Object

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)

618
619
620
621
# File 'lib/optparse.rb', line 618

def prepend(*args)
  update(*args)
  @list.unshift(args[0])
end

#reject(t) ⇒ Object

See OptionParser.reject.


586
587
588
# File 'lib/optparse.rb', line 586

def reject(t)
  @atype.delete(t)
end

#search(id, key) ⇒ Object

Searches key in id list. The result is returned or yielded if a block is given. If it isn't found, nil is returned.


643
644
645
646
647
648
# File 'lib/optparse.rb', line 643

def search(id, key)
  if list = __send__(id)
    val = list.fetch(key) {return nil}
    block_given? ? yield(val) : val
  end
end

#summarize(*args, &block) ⇒ Object

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.


672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
# File 'lib/optparse.rb', line 672

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