optparse 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.github/workflows/test.yml +24 -0
- data/.gitignore +8 -0
- data/COPYING +56 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +17 -0
- data/README.md +60 -0
- data/Rakefile +10 -0
- data/bin/console +7 -0
- data/bin/setup +6 -0
- data/lib/optionparser.rb +2 -0
- data/lib/optparse.rb +2237 -0
- data/lib/optparse/ac.rb +54 -0
- data/lib/optparse/date.rb +18 -0
- data/lib/optparse/kwargs.rb +17 -0
- data/lib/optparse/shellwords.rb +7 -0
- data/lib/optparse/time.rb +11 -0
- data/lib/optparse/uri.rb +7 -0
- data/lib/optparse/version.rb +71 -0
- data/optparse.gemspec +32 -0
- metadata +65 -0
data/lib/optparse/ac.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
require 'optparse'
|
3
|
+
|
4
|
+
class OptionParser::AC < OptionParser
|
5
|
+
private
|
6
|
+
|
7
|
+
def _check_ac_args(name, block)
|
8
|
+
unless /\A\w[-\w]*\z/ =~ name
|
9
|
+
raise ArgumentError, name
|
10
|
+
end
|
11
|
+
unless block
|
12
|
+
raise ArgumentError, "no block given", ParseError.filter_backtrace(caller)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
ARG_CONV = proc {|val| val.nil? ? true : val}
|
17
|
+
|
18
|
+
def _ac_arg_enable(prefix, name, help_string, block)
|
19
|
+
_check_ac_args(name, block)
|
20
|
+
|
21
|
+
sdesc = []
|
22
|
+
ldesc = ["--#{prefix}-#{name}"]
|
23
|
+
desc = [help_string]
|
24
|
+
q = name.downcase
|
25
|
+
ac_block = proc {|val| block.call(ARG_CONV.call(val))}
|
26
|
+
enable = Switch::PlacedArgument.new(nil, ARG_CONV, sdesc, ldesc, nil, desc, ac_block)
|
27
|
+
disable = Switch::NoArgument.new(nil, proc {false}, sdesc, ldesc, nil, desc, ac_block)
|
28
|
+
top.append(enable, [], ["enable-" + q], disable, ['disable-' + q])
|
29
|
+
enable
|
30
|
+
end
|
31
|
+
|
32
|
+
public
|
33
|
+
|
34
|
+
def ac_arg_enable(name, help_string, &block)
|
35
|
+
_ac_arg_enable("enable", name, help_string, block)
|
36
|
+
end
|
37
|
+
|
38
|
+
def ac_arg_disable(name, help_string, &block)
|
39
|
+
_ac_arg_enable("disable", name, help_string, block)
|
40
|
+
end
|
41
|
+
|
42
|
+
def ac_arg_with(name, help_string, &block)
|
43
|
+
_check_ac_args(name, block)
|
44
|
+
|
45
|
+
sdesc = []
|
46
|
+
ldesc = ["--with-#{name}"]
|
47
|
+
desc = [help_string]
|
48
|
+
q = name.downcase
|
49
|
+
with = Switch::PlacedArgument.new(*search(:atype, String), sdesc, ldesc, nil, desc, block)
|
50
|
+
without = Switch::NoArgument.new(nil, proc {}, sdesc, ldesc, nil, desc, block)
|
51
|
+
top.append(with, [], ["with-" + q], without, ['without-' + q])
|
52
|
+
with
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
require 'optparse'
|
3
|
+
require 'date'
|
4
|
+
|
5
|
+
OptionParser.accept(DateTime) do |s,|
|
6
|
+
begin
|
7
|
+
DateTime.parse(s) if s
|
8
|
+
rescue ArgumentError
|
9
|
+
raise OptionParser::InvalidArgument, s
|
10
|
+
end
|
11
|
+
end
|
12
|
+
OptionParser.accept(Date) do |s,|
|
13
|
+
begin
|
14
|
+
Date.parse(s) if s
|
15
|
+
rescue ArgumentError
|
16
|
+
raise OptionParser::InvalidArgument, s
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'optparse'
|
3
|
+
|
4
|
+
class OptionParser
|
5
|
+
def define_by_keywords(options, meth, **opts)
|
6
|
+
meth.parameters.each do |type, name|
|
7
|
+
case type
|
8
|
+
when :key, :keyreq
|
9
|
+
op, cl = *(type == :key ? %w"[ ]" : ["", ""])
|
10
|
+
define("--#{name}=#{op}#{name.upcase}#{cl}", *opts[name]) do |o|
|
11
|
+
options[name] = o
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
options
|
16
|
+
end
|
17
|
+
end
|
data/lib/optparse/uri.rb
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
# OptionParser internal utility
|
3
|
+
|
4
|
+
class << OptionParser
|
5
|
+
def show_version(*pkgs)
|
6
|
+
progname = ARGV.options.program_name
|
7
|
+
result = false
|
8
|
+
show = proc do |klass, cname, version|
|
9
|
+
str = "#{progname}"
|
10
|
+
unless klass == ::Object and cname == :VERSION
|
11
|
+
version = version.join(".") if Array === version
|
12
|
+
str << ": #{klass}" unless klass == Object
|
13
|
+
str << " version #{version}"
|
14
|
+
end
|
15
|
+
[:Release, :RELEASE].find do |rel|
|
16
|
+
if klass.const_defined?(rel)
|
17
|
+
str << " (#{klass.const_get(rel)})"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
puts str
|
21
|
+
result = true
|
22
|
+
end
|
23
|
+
if pkgs.size == 1 and pkgs[0] == "all"
|
24
|
+
self.search_const(::Object, /\AV(?:ERSION|ersion)\z/) do |klass, cname, version|
|
25
|
+
unless cname[1] == ?e and klass.const_defined?(:Version)
|
26
|
+
show.call(klass, cname.intern, version)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
else
|
30
|
+
pkgs.each do |pkg|
|
31
|
+
begin
|
32
|
+
pkg = pkg.split(/::|\//).inject(::Object) {|m, c| m.const_get(c)}
|
33
|
+
v = case
|
34
|
+
when pkg.const_defined?(:Version)
|
35
|
+
pkg.const_get(n = :Version)
|
36
|
+
when pkg.const_defined?(:VERSION)
|
37
|
+
pkg.const_get(n = :VERSION)
|
38
|
+
else
|
39
|
+
n = nil
|
40
|
+
"unknown"
|
41
|
+
end
|
42
|
+
show.call(pkg, n, v)
|
43
|
+
rescue NameError
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
result
|
48
|
+
end
|
49
|
+
|
50
|
+
def each_const(path, base = ::Object)
|
51
|
+
path.split(/::|\//).inject(base) do |klass, name|
|
52
|
+
raise NameError, path unless Module === klass
|
53
|
+
klass.constants.grep(/#{name}/i) do |c|
|
54
|
+
klass.const_defined?(c) or next
|
55
|
+
klass.const_get(c)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def search_const(klass, name)
|
61
|
+
klasses = [klass]
|
62
|
+
while klass = klasses.shift
|
63
|
+
klass.constants.each do |cname|
|
64
|
+
klass.const_defined?(cname) or next
|
65
|
+
const = klass.const_get(cname)
|
66
|
+
yield klass, cname, const if name === cname
|
67
|
+
klasses << const if Module === const and const != ::Object
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
data/optparse.gemspec
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
name = File.basename(__FILE__, ".gemspec")
|
4
|
+
version = ["lib", Array.new(name.count("-")+1, "..").join("/")].find do |dir|
|
5
|
+
break File.foreach(File.join(__dir__, dir, "#{name.tr('-', '/')}.rb")) do |line|
|
6
|
+
/^\s*OptionParser::Version\s*=\s*"(.*)"/ =~ line and break $1
|
7
|
+
end rescue nil
|
8
|
+
end
|
9
|
+
|
10
|
+
Gem::Specification.new do |spec|
|
11
|
+
spec.name = name
|
12
|
+
spec.version = version
|
13
|
+
spec.authors = ["Nobu Nakada"]
|
14
|
+
spec.email = ["nobu@ruby-lang.org"]
|
15
|
+
|
16
|
+
spec.summary = %q{OptionParser is a class for command-line option analysis.}
|
17
|
+
spec.description = %q{OptionParser is a class for command-line option analysis.}
|
18
|
+
spec.homepage = "https://github.com/ruby/optparse"
|
19
|
+
spec.license = ["Ruby", "BSD-2-Clause"]
|
20
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
|
21
|
+
spec.licenses = ["Ruby", "BSD-2-Clause"]
|
22
|
+
|
23
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
24
|
+
spec.metadata["source_code_uri"] = spec.homepage
|
25
|
+
|
26
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
27
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
|
28
|
+
end
|
29
|
+
spec.bindir = "exe"
|
30
|
+
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
31
|
+
spec.require_paths = ["lib"]
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: optparse
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Nobu Nakada
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-09-18 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: OptionParser is a class for command-line option analysis.
|
14
|
+
email:
|
15
|
+
- nobu@ruby-lang.org
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- ".github/workflows/test.yml"
|
21
|
+
- ".gitignore"
|
22
|
+
- COPYING
|
23
|
+
- Gemfile
|
24
|
+
- Gemfile.lock
|
25
|
+
- README.md
|
26
|
+
- Rakefile
|
27
|
+
- bin/console
|
28
|
+
- bin/setup
|
29
|
+
- lib/optionparser.rb
|
30
|
+
- lib/optparse.rb
|
31
|
+
- lib/optparse/ac.rb
|
32
|
+
- lib/optparse/date.rb
|
33
|
+
- lib/optparse/kwargs.rb
|
34
|
+
- lib/optparse/shellwords.rb
|
35
|
+
- lib/optparse/time.rb
|
36
|
+
- lib/optparse/uri.rb
|
37
|
+
- lib/optparse/version.rb
|
38
|
+
- optparse.gemspec
|
39
|
+
homepage: https://github.com/ruby/optparse
|
40
|
+
licenses:
|
41
|
+
- Ruby
|
42
|
+
- BSD-2-Clause
|
43
|
+
metadata:
|
44
|
+
homepage_uri: https://github.com/ruby/optparse
|
45
|
+
source_code_uri: https://github.com/ruby/optparse
|
46
|
+
post_install_message:
|
47
|
+
rdoc_options: []
|
48
|
+
require_paths:
|
49
|
+
- lib
|
50
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 2.5.0
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
requirements: []
|
61
|
+
rubygems_version: 3.1.2
|
62
|
+
signing_key:
|
63
|
+
specification_version: 4
|
64
|
+
summary: OptionParser is a class for command-line option analysis.
|
65
|
+
test_files: []
|