From 49684589cdbbbec3d43b73c1255f9c16171b055d Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 6 Jan 2016 08:23:10 +0000 Subject: optparse.rb: into kwdarg * lib/optparse.rb (OptionParser#order!): add `into` optional keyword argument to store the results. [Feature #11191] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53444 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/optparse.rb | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) (limited to 'lib') diff --git a/lib/optparse.rb b/lib/optparse.rb index b33d4cb395..280aa4934d 100644 --- a/lib/optparse.rb +++ b/lib/optparse.rb @@ -1508,17 +1508,18 @@ XXX # # Returns the rest of +argv+ left unparsed. # - def order(*argv, &block) + def order(*argv, into: nil, &nonopt) argv = argv[0].dup if argv.size == 1 and Array === argv[0] - order!(argv, &block) + order!(argv, into: into, &nonopt) end # # Same as #order, but removes switches destructively. # Non-option arguments remain in +argv+. # - def order!(argv = default_argv, &nonopt) - parse_in_order(argv, &nonopt) + def order!(argv = default_argv, into: nil, &nonopt) + setter = ->(name, val) {into[name.to_sym] = val} if into + parse_in_order(argv, setter, &nonopt) end def parse_in_order(argv = default_argv, setter = nil, &nonopt) # :nodoc: @@ -1599,18 +1600,18 @@ XXX # Parses command line arguments +argv+ in permutation mode and returns # list of non-option arguments. # - def permute(*argv) + def permute(*argv, into: nil) argv = argv[0].dup if argv.size == 1 and Array === argv[0] - permute!(argv) + permute!(argv, into: into) end # # Same as #permute, but removes switches destructively. # Non-option arguments remain in +argv+. # - def permute!(argv = default_argv) + def permute!(argv = default_argv, into: nil) nonopts = [] - order!(argv, &nonopts.method(:<<)) + order!(argv, into: into, &nonopts.method(:<<)) argv[0, 0] = nonopts argv end @@ -1619,20 +1620,20 @@ XXX # Parses command line arguments +argv+ in order when environment variable # POSIXLY_CORRECT is set, and in permutation mode otherwise. # - def parse(*argv) + def parse(*argv, into: nil) argv = argv[0].dup if argv.size == 1 and Array === argv[0] - parse!(argv) + parse!(argv, into: into) end # # Same as #parse, but removes switches destructively. # Non-option arguments remain in +argv+. # - def parse!(argv = default_argv) + def parse!(argv = default_argv, into: nil) if ENV.include?('POSIXLY_CORRECT') - order!(argv) + order!(argv, into: into) else - permute!(argv) + permute!(argv, into: into) end end -- cgit v1.2.3