mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
optparse/kwargs.rb
* lib/optparse/kwargs.rb (OptionParser#define_by_keywords): [EXPERIMENTAL] extract command line option definitions from the information of keyword arguments. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56423 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
b40d13a994
commit
0687baaf57
3 changed files with 63 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
Fri Oct 14 22:26:10 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* lib/optparse/kwargs.rb (OptionParser#define_by_keywords):
|
||||||
|
[EXPERIMENTAL] extract command line option definitions from the
|
||||||
|
information of keyword arguments.
|
||||||
|
|
||||||
Fri Oct 14 18:27:18 2016 SHIBATA Hiroshi <hsbt@ruby-lang.org>
|
Fri Oct 14 18:27:18 2016 SHIBATA Hiroshi <hsbt@ruby-lang.org>
|
||||||
|
|
||||||
* object.c: Improve documentation for Float conversion.
|
* object.c: Improve documentation for Float conversion.
|
||||||
|
|
17
lib/optparse/kwargs.rb
Normal file
17
lib/optparse/kwargs.rb
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
require 'optparse'
|
||||||
|
|
||||||
|
class OptionParser
|
||||||
|
def define_by_keywords(options, meth, **opts)
|
||||||
|
meth.parameters.each do |type, name|
|
||||||
|
case type
|
||||||
|
when :key, :keyreq
|
||||||
|
op, cl = *(type == :key ? %w"[ ]" : ["", ""])
|
||||||
|
define("--#{name}=#{op}#{name.upcase}#{cl}", *opts[name]) do |o|
|
||||||
|
options[name] = o
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
options
|
||||||
|
end
|
||||||
|
end
|
40
test/optparse/test_kwargs.rb
Normal file
40
test/optparse/test_kwargs.rb
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
# frozen_string_literal: false
|
||||||
|
require 'test/unit'
|
||||||
|
require 'optparse'
|
||||||
|
require 'optparse/kwargs'
|
||||||
|
|
||||||
|
class TestOptionParser < Test::Unit::TestCase
|
||||||
|
end
|
||||||
|
class TestOptionParser::KwArg < Test::Unit::TestCase
|
||||||
|
class K
|
||||||
|
def initialize(host:, port: 8080)
|
||||||
|
@host = host
|
||||||
|
@port = port
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class DummyOutput < String
|
||||||
|
alias write <<
|
||||||
|
end
|
||||||
|
def assert_no_error(*args)
|
||||||
|
$stderr, stderr = DummyOutput.new, $stderr
|
||||||
|
assert_nothing_raised(*args) {return yield}
|
||||||
|
ensure
|
||||||
|
stderr, $stderr = $stderr, stderr
|
||||||
|
$!.backtrace.delete_if {|e| /\A#{Regexp.quote(__FILE__)}:#{__LINE__-2}/o =~ e} if $!
|
||||||
|
assert_empty(stderr)
|
||||||
|
end
|
||||||
|
alias no_error assert_no_error
|
||||||
|
|
||||||
|
def test_kwarg
|
||||||
|
opt = OptionParser.new
|
||||||
|
options = opt.define_by_keywords({}, K.instance_method(:initialize),
|
||||||
|
port: [Integer])
|
||||||
|
assert_raise(OptionParser::MissingArgument) {opt.parse!(%w"--host")}
|
||||||
|
assert_nothing_raised {opt.parse!(%w"--host=localhost")}
|
||||||
|
assert_equal("localhost", options[:host])
|
||||||
|
assert_nothing_raised {opt.parse!(%w"--port")}
|
||||||
|
assert_nothing_raised {opt.parse!(%w"--port=80")}
|
||||||
|
assert_equal(80, options[:port])
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue