Spec-Zone.ru › Ruby 3.2

класс OptionParser::Switch

Родитель:
Объект

Класс отдельного переключателя. Не важен для пользователя.

Внутри Switch определены несколько классов, наследуемых от Switch: NoArgument, RequiredArgument и т.д.

Атрибуты

arg[R]
block[R]
conv[R]
desc[R]
long[R]
pattern[R]
short[R]

Публичные методы класса

guess(arg) Показать исходный код
# File lib/optparse.rb, line 519
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

Угадывает стиль аргумента из arg. Возвращает соответствующий класс OptionParser::Switch (OptionalArgument и т.д.).

incompatible_argument_styles(arg, t) Показать исходный код
# File lib/optparse.rb, line 534
def self.incompatible_argument_styles(arg, t)
  raise(ArgumentError, "#{arg}: incompatible argument styles\n  #{self}, #{t}",
        ParseError.filter_backtrace(caller(2)))
end
new(pattern = nil, conv = nil, short = nil, long = nil, arg = nil, desc = ([] if short or long), block = nil, &_block) Показать исходный код
# File lib/optparse.rb, line 543
def initialize(pattern = nil, conv = nil,
               short = nil, long = nil, arg = nil,
               desc = ([] if short or long), block = nil, &_block)
  raise if Array === pattern
  block ||= _block
  @pattern, @conv, @short, @long, @arg, @desc, @block =
    pattern, conv, short, long, arg, desc, block
end
pattern() Показать исходный код
# File lib/optparse.rb, line 539
def self.pattern
  NilClass
end

Публичные методы экземпляра

summarize(sdone = {}, ldone = {}, width = 1, max = width - 1, indent = "") { |indent| ... } Показать исходный код
# File lib/optparse.rb, line 603
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] << (left[-1].empty? ? ' ' * 4 : ', ') << 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

Создает текстовое резюме. Каждая строка резюме передается в блок (без новой строки).

sdone

Хеш с уже резюмированными опциями короткого стиля.

ldone

Хеш с уже резюмированными опциями длинного стиля.

width

Ширина левой части (части с опциями). Другими словами, правая часть (часть с описанием) начинается после width столбцов.

max

Максимальная ширина левой части -> опции заполняются в пределах max столбцов.

indent

Строка-префикс, отступающая все резюмированные строки.

switch_name() Показать исходный код
# File lib/optparse.rb, line 655
def switch_name
  (long.first || short.first).sub(/\A-+(?:\[no-\])?/, '')
end

Основное имя переключателя.

Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API