OptionParser::Completion
module OptionParser::Completion
关键字完成模块。这允许指定部分参数并根据可接受的值列表进行解析。
公共类方法
candidate(key, icase = false, pat = nil, &block) Show source
# File lib/optparse.rb, line 410
def self.candidate(key, icase = false, pat = nil, &block)
pat ||= Completion.regexp(key, icase)
candidates = []
block.call do |k, *v|
(if Regexp === k
kn = "".freeze
k === key
else
kn = defined?(k.id2name) ? k.id2name : k
pat === kn
end) or next
v << k if v.empty?
candidates << [k, v, kn]
end
candidates
end
regexp(key, icase) Show source
# File lib/optparse.rb, line 406
def self.regexp(key, icase)
Regexp.new('\A' + Regexp.quote(key).gsub(/\w+\b/, '\&\w*'), icase)
end
公共实例方法
candidate(key, icase = false, pat = nil) Show source
# File lib/optparse.rb, line 427
def candidate(key, icase = false, pat = nil)
Completion.candidate(key, icase, pat, &method(:each))
end
complete(key, icase = false, pat = nil) { |key, *sw| ... } Show source
# File lib/optparse.rb, line 432
def complete(key, icase = false, pat = nil)
candidates = candidate(key, icase, pat, &method(:each)).sort_by {|k, v, kn| kn.size}
if candidates.size == 1
canon, sw, * = candidates[0]
elsif candidates.size > 1
canon, sw, cn = candidates.shift
candidates.each do |k, v, kn|
next if sw == v
if String === cn and String === kn
if cn.rindex(kn, 0)
canon, sw, cn = k, v, kn
next
elsif kn.rindex(cn, 0)
next
end
end
throw :ambiguous, key
end
end
if canon
block_given? or return key, *sw
yield(key, *sw)
end
end
convert(opt = nil, val = nil, *) Show source
# File lib/optparse.rb, line 457
def convert(opt = nil, val = nil, *)
val
end