класс OptionParser::List
Простой список опций, предоставляющий отображение от короткой и/или длинной строки опции к OptionParser::Switch и отображение от допустимого аргумента к соответствующей паре шаблона и преобразователя. Также предоставляет функцию сводки.
Атрибуты
Отображение от допустимых типов аргументов к парам шаблона и преобразователя.
List всех переключателей и сводной строки.
Отображение от опций длинного стиля к фактическим объектам переключателей.
Отображение от опций короткого стиля к фактическим объектам переключателей.
Общедоступные методы класса
# File lib/optparse.rb, line 769
def initialize
@atype = {}
@short = OptionMap.new
@long = OptionMap.new
@list = []
end Просто инициализирует все переменные экземпляра.
Общедоступные методы экземпляра
# File lib/optparse.rb, line 779
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 См. OptionParser.accept.
# File lib/optparse.rb, line 843 def append(*args) update(*args) @list.push(args[0]) end
Добавляет switch в конец списка и связывает короткие, длинные и отрицательные длинные опции. Аргументы:
-
switch -
экземпляр
OptionParser::Switchдля вставки. -
short_opts -
Listкоротких опций. -
long_opts -
Listопций длинного стиля. -
nolong_opts -
Listопций длинного стиля с префиксом «no-».
append(switch, short_opts, long_opts, nolong_opts)
# File lib/optparse.rb, line 865 def complete(id, opt, icase = false, *pat, &block) __send__(id).complete(opt, icase, *pat, &block) end
Ищет в списке id значения opt и, при необходимости, шаблоны для завершения pat. Если icase равно true, поиск выполняется без учета регистра. Результат возвращается или выводится, если задан блок. Если значение не найдено, возвращается nil.
# File lib/optparse.rb, line 872 def each_option(&block) list.each(&block) end
Итерируется по каждой опции, передавая опцию в block.
# File lib/optparse.rb, line 827 def prepend(*args) update(*args) @list.unshift(args[0]) end
Вставляет switch в начало списка и связывает короткие, длинные и отрицательные длинные опции. Аргументы:
-
switch -
экземпляр
OptionParser::Switchдля вставки. -
short_opts -
Listкоротких опций. -
long_opts -
Listопций длинного стиля. -
nolong_opts -
Listопций длинного стиля с префиксом «no-».
prepend(switch, short_opts, long_opts, nolong_opts)
# File lib/optparse.rb, line 795 def reject(t) @atype.delete(t) end
См. OptionParser.reject.
# File lib/optparse.rb, line 852
def search(id, key)
if list = __send__(id)
val = list.fetch(key) {return nil}
block_given? ? yield(val) : val
end
end Ищет key в списке id . Результат возвращается или выводится, если задан блок. Если значение не найдено, возвращается nil.
# File lib/optparse.rb, line 881
def summarize(*args, &block)
sum = []
list.reverse_each do |opt|
if opt.respond_to?(:summarize) # perhaps 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 Создаёт таблицу сводки, передавая каждую строку в block (без новой строки). Аргументы args передаются методу summarize, который вызывается для каждой опции.
Приватные методы экземпляра
# File lib/optparse.rb, line 807
def update(sw, sopts, lopts, nsw = nil, nlopts = nil)
sopts.each {|o| @short[o] = sw} if sopts
lopts.each {|o| @long[o] = sw} if lopts
nlopts.each {|o| @long[o] = nsw} if nsw and nlopts
used = @short.invert.update(@long.invert)
@list.delete_if {|o| Switch === o and !used[o]}
end Добавляет sw в соответствии с sopts, lopts и nlopts.
-
sw -
экземпляр
OptionParser::Switchдля добавления. -
sopts -
Список коротких опций.
-
lopts -
Список опций длинного стиля.
-
nlopts -
Список отрицательных опций длинного стиля.
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.