Class: Gem::OptionParser::List

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

Overview

Simple option list providing mapping from short and/or long option string to Gem::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.



816
817
818
819
820
821
# File 'lib/rubygems/vendor/optparse/lib/optparse.rb', line 816

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.



802
803
804
# File 'lib/rubygems/vendor/optparse/lib/optparse.rb', line 802

def atype
  @atype
end

#listObject (readonly)

List of all switches and summary string.



811
812
813
# File 'lib/rubygems/vendor/optparse/lib/optparse.rb', line 811

def list
  @list
end

#longObject (readonly)

Map from long style option switches to actual switch objects.



808
809
810
# File 'lib/rubygems/vendor/optparse/lib/optparse.rb', line 808

def long
  @long
end

#shortObject (readonly)

Map from short style option switches to actual switch objects.



805
806
807
# File 'lib/rubygems/vendor/optparse/lib/optparse.rb', line 805

def short
  @short
end

Instance Method Details

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

See Gem::OptionParser.accept.



837
838
839
840
841
842
843
844
845
846
847
848
# File 'lib/rubygems/vendor/optparse/lib/optparse.rb', line 837

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:



961
962
963
964
965
966
967
968
# File 'lib/rubygems/vendor/optparse/lib/optparse.rb', line 961

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

Gem::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)


901
902
903
904
# File 'lib/rubygems/vendor/optparse/lib/optparse.rb', line 901

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.



923
924
925
# File 'lib/rubygems/vendor/optparse/lib/optparse.rb', line 923

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

#compsys(*args, &block) ⇒ Object

:nodoc:



970
971
972
973
974
975
976
# File 'lib/rubygems/vendor/optparse/lib/optparse.rb', line 970

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.



934
935
936
# File 'lib/rubygems/vendor/optparse/lib/optparse.rb', line 934

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

#get_candidates(id) {|__send__(id).keys| ... } ⇒ Object

Yields:

  • (__send__(id).keys)


927
928
929
# File 'lib/rubygems/vendor/optparse/lib/optparse.rb', line 927

def get_candidates(id)
  yield __send__(id).keys
end

#prepend(*args) ⇒ Object

Inserts switch at the head of the list, and associates short, long and negated long options. Arguments are:

switch

Gem::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)


885
886
887
888
# File 'lib/rubygems/vendor/optparse/lib/optparse.rb', line 885

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

#pretty_print(q) ⇒ Object

:nodoc:



823
824
825
826
827
828
829
830
831
832
# File 'lib/rubygems/vendor/optparse/lib/optparse.rb', line 823

def pretty_print(q)         # :nodoc:
  q.group(1, "(", ")") do
    @list.each do |sw|
      next unless Switch === sw
      q.group(1, "(" + sw.pretty_head, ")") do
        sw.pretty_print_contents(q)
      end
    end
  end
end

#reject(t) ⇒ Object

See Gem::OptionParser.reject.



853
854
855
# File 'lib/rubygems/vendor/optparse/lib/optparse.rb', line 853

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.



910
911
912
913
914
915
# File 'lib/rubygems/vendor/optparse/lib/optparse.rb', line 910

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.



943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
# File 'lib/rubygems/vendor/optparse/lib/optparse.rb', line 943

def summarize(*args, &block)
  sum = []
  list.reverse_each do |opt|
    if opt.respond_to?(:summarize) # perhaps Gem::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