cli-option_parser.rb 0.5.2

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.
Files changed (106) hide show
  1. checksums.yaml +7 -0
  2. data/.bundle/config +2 -0
  3. data/.document +7 -0
  4. data/.editorconfig +13 -0
  5. data/.github/dependabot.yml +6 -0
  6. data/.github/workflows/test.yml +26 -0
  7. data/.gitignore +13 -0
  8. data/.rdoc_options +4 -0
  9. data/COPYING +56 -0
  10. data/Gemfile +5 -0
  11. data/README.md +59 -0
  12. data/Rakefile +14 -0
  13. data/cli-option_parser.rb.gemspec +23 -0
  14. data/doc/optparse/.document +1 -0
  15. data/doc/optparse/argument_converters.rdoc +380 -0
  16. data/doc/optparse/creates_option.rdoc +7 -0
  17. data/doc/optparse/option_params.rdoc +509 -0
  18. data/doc/optparse/ruby/argument_abbreviation.rb +9 -0
  19. data/doc/optparse/ruby/argument_keywords.rb +6 -0
  20. data/doc/optparse/ruby/argument_strings.rb +6 -0
  21. data/doc/optparse/ruby/argv.rb +2 -0
  22. data/doc/optparse/ruby/array.rb +6 -0
  23. data/doc/optparse/ruby/basic.rb +17 -0
  24. data/doc/optparse/ruby/block.rb +9 -0
  25. data/doc/optparse/ruby/collected_options.rb +8 -0
  26. data/doc/optparse/ruby/custom_converter.rb +9 -0
  27. data/doc/optparse/ruby/date.rb +6 -0
  28. data/doc/optparse/ruby/datetime.rb +6 -0
  29. data/doc/optparse/ruby/decimal_integer.rb +7 -0
  30. data/doc/optparse/ruby/decimal_numeric.rb +7 -0
  31. data/doc/optparse/ruby/default_values.rb +8 -0
  32. data/doc/optparse/ruby/descriptions.rb +15 -0
  33. data/doc/optparse/ruby/explicit_array_values.rb +9 -0
  34. data/doc/optparse/ruby/explicit_hash_values.rb +9 -0
  35. data/doc/optparse/ruby/false_class.rb +6 -0
  36. data/doc/optparse/ruby/float.rb +6 -0
  37. data/doc/optparse/ruby/help.rb +18 -0
  38. data/doc/optparse/ruby/help_banner.rb +7 -0
  39. data/doc/optparse/ruby/help_format.rb +25 -0
  40. data/doc/optparse/ruby/help_program_name.rb +7 -0
  41. data/doc/optparse/ruby/integer.rb +6 -0
  42. data/doc/optparse/ruby/long_names.rb +9 -0
  43. data/doc/optparse/ruby/long_optional.rb +6 -0
  44. data/doc/optparse/ruby/long_required.rb +6 -0
  45. data/doc/optparse/ruby/long_simple.rb +9 -0
  46. data/doc/optparse/ruby/long_with_negation.rb +6 -0
  47. data/doc/optparse/ruby/match_converter.rb +9 -0
  48. data/doc/optparse/ruby/matched_values.rb +6 -0
  49. data/doc/optparse/ruby/method.rb +11 -0
  50. data/doc/optparse/ruby/missing_options.rb +12 -0
  51. data/doc/optparse/ruby/mixed_names.rb +12 -0
  52. data/doc/optparse/ruby/name_abbrev.rb +9 -0
  53. data/doc/optparse/ruby/no_abbreviation.rb +10 -0
  54. data/doc/optparse/ruby/numeric.rb +6 -0
  55. data/doc/optparse/ruby/object.rb +6 -0
  56. data/doc/optparse/ruby/octal_integer.rb +7 -0
  57. data/doc/optparse/ruby/optional_argument.rb +9 -0
  58. data/doc/optparse/ruby/parse.rb +13 -0
  59. data/doc/optparse/ruby/parse_bang.rb +13 -0
  60. data/doc/optparse/ruby/proc.rb +13 -0
  61. data/doc/optparse/ruby/regexp.rb +6 -0
  62. data/doc/optparse/ruby/required_argument.rb +9 -0
  63. data/doc/optparse/ruby/shellwords.rb +6 -0
  64. data/doc/optparse/ruby/short_names.rb +9 -0
  65. data/doc/optparse/ruby/short_optional.rb +6 -0
  66. data/doc/optparse/ruby/short_range.rb +6 -0
  67. data/doc/optparse/ruby/short_required.rb +6 -0
  68. data/doc/optparse/ruby/short_simple.rb +9 -0
  69. data/doc/optparse/ruby/string.rb +6 -0
  70. data/doc/optparse/ruby/terminator.rb +6 -0
  71. data/doc/optparse/ruby/time.rb +6 -0
  72. data/doc/optparse/ruby/true_class.rb +6 -0
  73. data/doc/optparse/ruby/uri.rb +6 -0
  74. data/doc/optparse/tutorial.rdoc +858 -0
  75. data/lib/cli/option_parser/ac.rb +52 -0
  76. data/lib/cli/option_parser/date.rb +16 -0
  77. data/lib/cli/option_parser/kwargs.rb +21 -0
  78. data/lib/cli/option_parser/shellwords.rb +4 -0
  79. data/lib/cli/option_parser/time.rb +9 -0
  80. data/lib/cli/option_parser/uri.rb +4 -0
  81. data/lib/cli/option_parser/version.rb +71 -0
  82. data/lib/cli/option_parser.rb +2353 -0
  83. data/lib/cli-option_parser.rb +1 -0
  84. data/misc/rb_optparse.bash +21 -0
  85. data/misc/rb_optparse.zsh +39 -0
  86. data/rakelib/.document +0 -0
  87. data/rakelib/changelogs.rake +34 -0
  88. data/rakelib/epoch.rake +5 -0
  89. data/rakelib/version.rake +51 -0
  90. data/test/lib/helper.rb +4 -0
  91. data/test/optparse/test_acceptable.rb +198 -0
  92. data/test/optparse/test_autoconf.rb +69 -0
  93. data/test/optparse/test_bash_completion.rb +46 -0
  94. data/test/optparse/test_cclass.rb +18 -0
  95. data/test/optparse/test_did_you_mean.rb +48 -0
  96. data/test/optparse/test_getopts.rb +49 -0
  97. data/test/optparse/test_kwargs.rb +38 -0
  98. data/test/optparse/test_load.rb +141 -0
  99. data/test/optparse/test_noarg.rb +79 -0
  100. data/test/optparse/test_optarg.rb +60 -0
  101. data/test/optparse/test_optparse.rb +127 -0
  102. data/test/optparse/test_placearg.rb +76 -0
  103. data/test/optparse/test_reqarg.rb +95 -0
  104. data/test/optparse/test_summary.rb +81 -0
  105. data/test/optparse/test_zsh_completion.rb +21 -0
  106. metadata +154 -0
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: false
2
+ class CLI::OptionParser::AC < CLI::OptionParser
3
+ private
4
+
5
+ def _check_ac_args(name, block)
6
+ unless /\A\w[-\w]*\z/ =~ name
7
+ raise ArgumentError, name
8
+ end
9
+ unless block
10
+ raise ArgumentError, "no block given", ParseError.filter_backtrace(caller)
11
+ end
12
+ end
13
+
14
+ ARG_CONV = proc {|val| val.nil? ? true : val}
15
+
16
+ def _ac_arg_enable(prefix, name, help_string, block)
17
+ _check_ac_args(name, block)
18
+
19
+ sdesc = []
20
+ ldesc = ["--#{prefix}-#{name}"]
21
+ desc = [help_string]
22
+ q = name.downcase
23
+ ac_block = proc {|val| block.call(ARG_CONV.call(val))}
24
+ enable = Switch::PlacedArgument.new(nil, ARG_CONV, sdesc, ldesc, nil, desc, ac_block)
25
+ disable = Switch::NoArgument.new(nil, proc {false}, sdesc, ldesc, nil, desc, ac_block)
26
+ top.append(enable, [], ["enable-" + q], disable, ['disable-' + q])
27
+ enable
28
+ end
29
+
30
+ public
31
+
32
+ def ac_arg_enable(name, help_string, &block)
33
+ _ac_arg_enable("enable", name, help_string, block)
34
+ end
35
+
36
+ def ac_arg_disable(name, help_string, &block)
37
+ _ac_arg_enable("disable", name, help_string, block)
38
+ end
39
+
40
+ def ac_arg_with(name, help_string, &block)
41
+ _check_ac_args(name, block)
42
+
43
+ sdesc = []
44
+ ldesc = ["--with-#{name}"]
45
+ desc = [help_string]
46
+ q = name.downcase
47
+ with = Switch::PlacedArgument.new(*search(:atype, String), sdesc, ldesc, nil, desc, block)
48
+ without = Switch::NoArgument.new(nil, proc {}, sdesc, ldesc, nil, desc, block)
49
+ top.append(with, [], ["with-" + q], without, ['without-' + q])
50
+ with
51
+ end
52
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: false
2
+ require 'date'
3
+ CLI::OptionParser.accept(DateTime) do |s,|
4
+ begin
5
+ DateTime.parse(s) if s
6
+ rescue ArgumentError
7
+ raise CLI::OptionParser::InvalidArgument, s
8
+ end
9
+ end
10
+ CLI::OptionParser.accept(Date) do |s,|
11
+ begin
12
+ Date.parse(s) if s
13
+ rescue ArgumentError
14
+ raise CLI::OptionParser::InvalidArgument, s
15
+ end
16
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CLI::OptionParser
4
+ # :call-seq:
5
+ # define_by_keywords(options, method, **params)
6
+ #
7
+ # :include: ../..option_parserreates_option.rdoc
8
+ #
9
+ def define_by_keywords(options, meth, **opts)
10
+ meth.parameters.each do |type, name|
11
+ case type
12
+ when :key, :keyreq
13
+ op, cl = *(type == :key ? %w"[ ]" : ["", ""])
14
+ define("--#{name}=#{op}#{name.upcase}#{cl}", *opts[name]) do |o|
15
+ options[name] = o
16
+ end
17
+ end
18
+ end
19
+ options
20
+ end
21
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: false
2
+ # -*- ruby -*-
3
+ require 'shellwords'
4
+ CLI::OptionParser.accept(Shellwords) {|s,| Shellwords.shellwords(s)}
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: false
2
+ require 'time'
3
+ CLI::OptionParser.accept(Time) do |s,|
4
+ begin
5
+ (Time.httpdate(s) rescue Time.parse(s)) if s
6
+ rescue
7
+ raise CLI::OptionParser::InvalidArgument, s
8
+ end
9
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: false
2
+ # -*- ruby -*-
3
+ require 'uri'
4
+ CLI::OptionParser.accept(URI) {|s,| URI.parse(s) if s}
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: false
2
+ # OptionParser internal utility
3
+
4
+ class << CLI::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