класс OptionParser::Switch
Класс отдельного переключателя. Не важен для пользователя.
Внутри Switch определены несколько классов, наследуемых от Switch: NoArgument, RequiredArgument и т.д.
Атрибуты
Публичные методы класса
# 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 и т.д.).
# 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 # 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 # File lib/optparse.rb, line 539 def self.pattern NilClass end
Публичные методы экземпляра
# 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 -
Строка-префикс, отступающая все резюмированные строки.
# 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.