Class: OptionParser::Switch

Inherits:
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

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

A new instance of Switch



312
313
314
315
316
317
318
# File 'lib/optparse.rb', line 312

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

- (Object) arg (readonly)

Returns the value of attribute arg



282
283
284
# File 'lib/optparse.rb', line 282

def arg
  @arg
end

- (Object) block (readonly)

Returns the value of attribute block



282
283
284
# File 'lib/optparse.rb', line 282

def block
  @block
end

- (Object) conv (readonly)

Returns the value of attribute conv



282
283
284
# File 'lib/optparse.rb', line 282

def conv
  @conv
end

- (Object) desc (readonly)

Returns the value of attribute desc



282
283
284
# File 'lib/optparse.rb', line 282

def desc
  @desc
end

- (Object) long (readonly)

Returns the value of attribute long



282
283
284
# File 'lib/optparse.rb', line 282

def long
  @long
end

- (Object) pattern (readonly)

Returns the value of attribute pattern



282
283
284
# File 'lib/optparse.rb', line 282

def pattern
  @pattern
end

- (Object) short (readonly)

Returns the value of attribute short



282
283
284
# File 'lib/optparse.rb', line 282

def short
  @short
end

Class Method Details

+ (Object) guess(arg)

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



288
289
290
291
292
293
294
295
296
297
298
299
300
301
# File 'lib/optparse.rb', line 288

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

+ (Object) incompatible_argument_styles(arg, t)

Raises:

  • (ArgumentError)


303
304
305
306
# File 'lib/optparse.rb', line 303

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

+ (Object) pattern



308
309
310
# File 'lib/optparse.rb', line 308

def self.pattern
  NilClass
end

Instance Method Details

- (Object) add_banner(to)

:nodoc:



408
409
410
411
412
413
414
# File 'lib/optparse.rb', line 408

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

- (Boolean) match_nonswitch?(str)

:nodoc:

Returns:

  • (Boolean)


416
417
418
# File 'lib/optparse.rb', line 416

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

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

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.



371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
# File 'lib/optparse.rb', line 371

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

- (Object) switch_name

Main name of the switch.



423
424
425
# File 'lib/optparse.rb', line 423

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