Class: OptionParser::Switch

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

Overview

Individual switch class. Not important to the user.

Defined within Switch are several Switch-derived classes: NoArgument, RequiredArgument, etc.

Defined Under Namespace

Classes: NoArgument, OptionalArgument, PlacedArgument, RequiredArgument

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(pattern = nil, conv = nil, short = nil, long = nil, arg = nil, desc = ([] if short or long), block = Proc.new) ⇒ Switch

Returns a new instance of Switch.



508
509
510
511
512
513
514
# File 'lib/optparse.rb', line 508

def initialize(pattern = nil, conv = nil,
               short = nil, long = nil, arg = nil,
               desc = ([] if short or long), block = Proc.new)
  raise if Array === pattern
  @pattern, @conv, @short, @long, @arg, @desc, @block =
    pattern, conv, short, long, arg, desc, block
end

Instance Attribute Details

#argObject (readonly)

Returns the value of attribute arg



478
479
480
# File 'lib/optparse.rb', line 478

def arg
  @arg
end

#blockObject (readonly)

Returns the value of attribute block



478
479
480
# File 'lib/optparse.rb', line 478

def block
  @block
end

#convObject (readonly)

Returns the value of attribute conv



478
479
480
# File 'lib/optparse.rb', line 478

def conv
  @conv
end

#descObject (readonly)

Returns the value of attribute desc



478
479
480
# File 'lib/optparse.rb', line 478

def desc
  @desc
end

#longObject (readonly)

Returns the value of attribute long



478
479
480
# File 'lib/optparse.rb', line 478

def long
  @long
end

#patternObject (readonly)

Returns the value of attribute pattern



478
479
480
# File 'lib/optparse.rb', line 478

def pattern
  @pattern
end

#shortObject (readonly)

Returns the value of attribute short



478
479
480
# File 'lib/optparse.rb', line 478

def short
  @short
end

Class Method Details

.guess(arg) ⇒ Object

Guesses argument style from arg. Returns corresponding OptionParser::Switch class (OptionalArgument, etc.).



484
485
486
487
488
489
490
491
492
493
494
495
496
497
# File 'lib/optparse.rb', line 484

def self.guess(arg)
  case arg
  when ""
    t = self
  when /\A=?\[/
    t = Switch::OptionalArgument
  when /\A\s+\[/
    t = Switch::PlacedArgument
  else
    t = Switch::RequiredArgument
  end
  self >= t or incompatible_argument_styles(arg, t)
  t
end

.incompatible_argument_styles(arg, t) ⇒ Object

Raises:

  • (ArgumentError)


499
500
501
502
# File 'lib/optparse.rb', line 499

def self.incompatible_argument_styles(arg, t)
  raise(ArgumentError, "#{arg}: incompatible argument styles\n  #{self}, #{t}",
        ParseError.filter_backtrace(caller(2)))
end

.patternObject



504
505
506
# File 'lib/optparse.rb', line 504

def self.pattern
  NilClass
end

Instance Method Details

#add_banner(to) ⇒ Object

:nodoc:



604
605
606
607
608
609
610
# File 'lib/optparse.rb', line 604

def add_banner(to)  # :nodoc:
  unless @short or @long
    s = desc.join
    to << " [" + s + "]..." unless s.empty?
  end
  to
end

#compsys(sdone, ldone) ⇒ Object

:nodoc:



623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
# File 'lib/optparse.rb', line 623

def compsys(sdone, ldone)   # :nodoc:
  sopts, lopts = [], []
  @short.each {|s| sdone.fetch(s) {sopts << s}; sdone[s] = true} if @short
  @long.each {|s| ldone.fetch(s) {lopts << s}; ldone[s] = true} if @long
  return if sopts.empty? and lopts.empty? # completely hidden

  (sopts+lopts).each do |opt|
    # "(-x -c -r)-l[left justify]" \
    if /^--\[no-\](.+)$/ =~ opt
      o = $1
      yield("--#{o}", desc.join(""))
      yield("--no-#{o}", desc.join(""))
    else
      yield("#{opt}", desc.join(""))
    end
  end
end

#match_nonswitch?(str) ⇒ Boolean

:nodoc:

Returns:

  • (Boolean)


612
613
614
# File 'lib/optparse.rb', line 612

def match_nonswitch?(str)  # :nodoc:
  @pattern =~ str unless @short or @long
end

#summarize(sdone = [], ldone = [], width = 1, max = width - 1, indent = "") ⇒ Object

Produces the summary text. Each line of the summary is yielded to the block (without newline).

sdone

Already summarized short style options keyed hash.

ldone

Already summarized long style options keyed hash.

width

Width of left side (option part). In other words, the right side (description part) starts after width columns.

max

Maximum width of left side -> the options are filled within max columns.

indent

Prefix string indents all summarized lines.



567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
# File 'lib/optparse.rb', line 567

def summarize(sdone = [], ldone = [], width = 1, max = width - 1, indent = "")
  sopts, lopts = [], [], nil
  @short.each {|s| sdone.fetch(s) {sopts << s}; sdone[s] = true} if @short
  @long.each {|s| ldone.fetch(s) {lopts << s}; ldone[s] = true} if @long
  return if sopts.empty? and lopts.empty? # completely hidden

  left = [sopts.join(', ')]
  right = desc.dup

  while s = lopts.shift
    l = left[-1].length + s.length
    l += arg.length if left.size == 1 && arg
    l < max or sopts.empty? or left << ''
    left[-1] << if left[-1].empty? then ' ' * 4 else ', ' end << s
  end

  if arg
    left[0] << (left[1] ? arg.sub(/\A(\[?)=/, '\1') + ',' : arg)
  end
  mlen = left.collect {|ss| ss.length}.max.to_i
  while mlen > width and l = left.shift
    mlen = left.collect {|ss| ss.length}.max.to_i if l.length == mlen
    if l.length < width and (r = right[0]) and !r.empty?
      l = l.to_s.ljust(width) + ' ' + r
      right.shift
    end
    yield(indent + l)
  end

  while begin l = left.shift; r = right.shift; l or r end
    l = l.to_s.ljust(width) + ' ' + r if r and !r.empty?
    yield(indent + l)
  end

  self
end

#switch_nameObject

Main name of the switch.



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

def switch_name
  (long.first || short.first).sub(/\A-+(?:\[no-\])?/, '')
end