зеркало из https://github.com/github/ruby.git
* lib/optparse.rb (OptionParser::List#summarize): gives priority
to latter switches. [ruby-dev:36692] * lib/optparse.rb (OptionParser#summarize): do not append unnecessary line terminator. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21066 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
90cdbb0ed9
Коммит
0a23fe6572
|
@ -1,3 +1,11 @@
|
|||
Fri Dec 26 15:50:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* lib/optparse.rb (OptionParser::List#summarize): gives priority
|
||||
to latter switches. [ruby-dev:36692]
|
||||
|
||||
* lib/optparse.rb (OptionParser#summarize): do not append
|
||||
unnecessary line terminator.
|
||||
|
||||
Fri Dec 26 14:01:38 2008 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* io.c (fptr_finalize): close the IO object even if finish_writeconv or
|
||||
|
|
|
@ -631,17 +631,21 @@ class OptionParser
|
|||
# method which is called on every option.
|
||||
#
|
||||
def summarize(*args, &block)
|
||||
list.each do |opt|
|
||||
sum = []
|
||||
list.reverse_each do |opt|
|
||||
if opt.respond_to?(:summarize) # perhaps OptionParser::Switch
|
||||
opt.summarize(*args, &block)
|
||||
s = []
|
||||
opt.summarize(*args) {|l| s << l}
|
||||
sum.concat(s.reverse)
|
||||
elsif !opt or opt.empty?
|
||||
yield("")
|
||||
sum << ""
|
||||
elsif opt.respond_to?(:each_line)
|
||||
opt.each_line(&block)
|
||||
sum.concat([*opt.each_line].reverse)
|
||||
else
|
||||
opt.each(&block)
|
||||
sum.concat([*opt.each].reverse)
|
||||
end
|
||||
end
|
||||
sum.reverse_each(&block)
|
||||
end
|
||||
|
||||
def add_banner(to) # :nodoc:
|
||||
|
@ -964,7 +968,8 @@ class OptionParser
|
|||
# +indent+:: Indentation, defaults to @summary_indent.
|
||||
#
|
||||
def summarize(to = [], width = @summary_width, max = width - 1, indent = @summary_indent, &blk)
|
||||
visit(:summarize, {}, {}, width, max, indent, &(blk || proc {|l| to << l + $/}))
|
||||
blk ||= proc {|l| to << (l.index($/, -1) ? l : l + $/)}
|
||||
visit(:summarize, {}, {}, width, max, indent, &blk)
|
||||
to
|
||||
end
|
||||
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
require 'test/unit'
|
||||
require 'optparse'
|
||||
|
||||
class TestOptionParser < Test::Unit::TestCase; end
|
||||
class TestOptionParser::SummaryTest < Test::Unit::TestCase
|
||||
def test_short_clash
|
||||
r = nil
|
||||
o = OptionParser.new do |opts|
|
||||
opts.on("-f", "--first-option", "description 1", "description 2"){r = "first-option"}
|
||||
opts.on("-t", "--test-option"){r = "test-option"}
|
||||
opts.on("-t", "--another-test-option"){r = "another-test-option"}
|
||||
opts.separator "this is\nseparator"
|
||||
opts.on("-l", "--last-option"){r = "last-option"}
|
||||
end
|
||||
s = o.summarize
|
||||
o.parse("-t")
|
||||
assert_match(/--#{r}/, s.grep(/^\s*-t,/)[0])
|
||||
assert_match(/first-option/, s[0])
|
||||
assert_match(/description 1/, s[0])
|
||||
assert_match(/description 2/, s[1])
|
||||
assert_match(/last-option/, s[-1])
|
||||
end
|
||||
end
|
Загрузка…
Ссылка в новой задаче