opt_parse_builder 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.
Files changed (39) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/.rspec +1 -0
  4. data/.ruby-version +1 -0
  5. data/CHANGELOG.md +5 -0
  6. data/Gemfile +8 -0
  7. data/Gemfile.lock +35 -0
  8. data/LICENSE +23 -0
  9. data/README.md +434 -0
  10. data/Rakefile +13 -0
  11. data/examples/hello_world.rb +20 -0
  12. data/lib/opt_parse_builder.rb +156 -0
  13. data/lib/opt_parse_builder/argument.rb +62 -0
  14. data/lib/opt_parse_builder/argument_builder.rb +193 -0
  15. data/lib/opt_parse_builder/argument_bundle.rb +30 -0
  16. data/lib/opt_parse_builder/argument_bundle_builder.rb +34 -0
  17. data/lib/opt_parse_builder/argument_values.rb +60 -0
  18. data/lib/opt_parse_builder/banner_argument.rb +11 -0
  19. data/lib/opt_parse_builder/constant_argument.rb +16 -0
  20. data/lib/opt_parse_builder/errors.rb +10 -0
  21. data/lib/opt_parse_builder/formats_operand_name.rb +9 -0
  22. data/lib/opt_parse_builder/has_value.rb +21 -0
  23. data/lib/opt_parse_builder/null_argument.rb +4 -0
  24. data/lib/opt_parse_builder/option_argument.rb +33 -0
  25. data/lib/opt_parse_builder/optional_operand_argument.rb +29 -0
  26. data/lib/opt_parse_builder/parser.rb +345 -0
  27. data/lib/opt_parse_builder/parser_builder.rb +17 -0
  28. data/lib/opt_parse_builder/required_operand_argument.rb +32 -0
  29. data/lib/opt_parse_builder/separator_argument.rb +11 -0
  30. data/lib/opt_parse_builder/splat_operand_argument.rb +22 -0
  31. data/lib/opt_parse_builder/stable_sort.rb +13 -0
  32. data/lib/opt_parse_builder/version.rb +6 -0
  33. data/opt_parse_builder.gemspec +35 -0
  34. data/rake/bundler.rake +1 -0
  35. data/rake/default.rake +1 -0
  36. data/rake/rdoc.rake +7 -0
  37. data/rake/spec.rake +3 -0
  38. data/rake/test.rake +2 -0
  39. metadata +126 -0
@@ -0,0 +1,17 @@
1
+ require "forwardable"
2
+
3
+ module OptParseBuilder
4
+ class ParserBuilder
5
+
6
+ extend Forwardable
7
+
8
+ attr_reader :parser
9
+
10
+ def initialize
11
+ @parser = Parser.new
12
+ end
13
+
14
+ def_delegators :@parser, :add, :banner, :separator
15
+
16
+ end
17
+ end
@@ -0,0 +1,32 @@
1
+ module OptParseBuilder
2
+ class RequiredOperandArgument < Argument # :nodoc:
3
+
4
+ include FormatsOperandName
5
+ include HasValue
6
+
7
+ def initialize(key, default, help_name)
8
+ init_value(key, default)
9
+ @help_name = help_name || key
10
+ end
11
+
12
+ def operand_notation
13
+ "<#{format_operand_name(@help_name)}>"
14
+ end
15
+
16
+ def shift_operand(argv)
17
+ @value = argv.shift
18
+ unless @value
19
+ raise OptionParser::MissingArgument, operand_notation
20
+ end
21
+ end
22
+
23
+ def optional
24
+ OptionalOperandArgument.new(@key, @default, @help_name)
25
+ end
26
+
27
+ def required
28
+ self
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,11 @@
1
+ module OptParseBuilder
2
+ class SeparatorArgument < Argument # :nodoc:
3
+
4
+ attr_reader :separator_lines
5
+
6
+ def initialize(separator_lines)
7
+ @separator_lines = separator_lines
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,22 @@
1
+ module OptParseBuilder
2
+ class SplatOperandArgument < Argument # :nodoc:
3
+
4
+ include FormatsOperandName
5
+ include HasValue
6
+
7
+ def initialize(key, default, help_name)
8
+ init_value(key, default)
9
+ @help_name = help_name || key
10
+ end
11
+
12
+ def operand_notation
13
+ "[<#{format_operand_name(@help_name)}>...]"
14
+ end
15
+
16
+ def shift_operand(argv)
17
+ @value = argv.dup
18
+ argv.clear
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,13 @@
1
+ module OptParseBuilder
2
+ module StableSort # :nodoc:
3
+
4
+ module_function
5
+
6
+ def stable_sort_by!(a)
7
+ a.sort_by!.with_index do |e, i|
8
+ [yield(e), i]
9
+ end
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,6 @@
1
+ module OptParseBuilder
2
+
3
+ # Library version. Follows Semantic Versioning 2.0
4
+ VERSION = "0.1.0"
5
+
6
+ end
@@ -0,0 +1,35 @@
1
+ lib = File.expand_path("lib", __dir__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require "opt_parse_builder/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "opt_parse_builder"
7
+ spec.version = OptParseBuilder::VERSION
8
+ spec.authors = ["Wayne Conrad"]
9
+ spec.email = ["kf7qga@gmail.com"]
10
+ spec.summary = "Builder DSL for optparse, with more"
11
+ spec.license = 'MIT'
12
+ spec.description = <<~DESCRIPTION
13
+ Processes CLI arguments using optparse. Adds to optparse a
14
+ compact builder-style DSL, operand (positional argument) parsing,
15
+ and easy sharing of common argument definitions within a suite of
16
+ commands. That's all it does--it is not a framework.
17
+ DESCRIPTION
18
+ spec.homepage = "https://github.com/wconrad/opt_parse_builder"
19
+ # Specify which files should be added to the gem when it is released.
20
+ # The `git ls-files -z` loads the files in the RubyGem that have
21
+ # been added into git.
22
+ spec.files = Dir.chdir(__dir__) do
23
+ `git ls-files -z`.split("\x0").reject do |f|
24
+ f.match(%r{^(test|spec|features)/})
25
+ end
26
+ end
27
+ spec.bindir = "bin"
28
+ spec.executables = spec.files.grep(%r{^#{spec.bindir}/}) do |f|
29
+ File.basename(f)
30
+ end
31
+ spec.require_paths = ["lib"]
32
+ spec.add_development_dependency "bundler", "~> 2.1"
33
+ spec.add_development_dependency "rake", "~> 13.0"
34
+ spec.add_development_dependency "rspec", "~> 3.10"
35
+ end
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1 @@
1
+ task :default => [:test]
@@ -0,0 +1,7 @@
1
+ require 'rdoc/task'
2
+
3
+ RDoc::Task.new do |rdoc|
4
+ rdoc.main = "README.md"
5
+ rdoc.markup = :markdown
6
+ rdoc.rdoc_files.include("README.md", "lib/**/*.rb")
7
+ end
@@ -0,0 +1,3 @@
1
+ require 'rspec/core/rake_task'
2
+ RSpec::Core::RakeTask.new 'test:spec'
3
+ task :spec => ['test:spec']
@@ -0,0 +1,2 @@
1
+ desc 'Run all tests'
2
+ task :test => ['test:spec']
metadata ADDED
@@ -0,0 +1,126 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: opt_parse_builder
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Wayne Conrad
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-11-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.1'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '13.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '13.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.10'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.10'
55
+ description: |
56
+ Processes CLI arguments using optparse. Adds to optparse a
57
+ compact builder-style DSL, operand (positional argument) parsing,
58
+ and easy sharing of common argument definitions within a suite of
59
+ commands. That's all it does--it is not a framework.
60
+ email:
61
+ - kf7qga@gmail.com
62
+ executables: []
63
+ extensions: []
64
+ extra_rdoc_files: []
65
+ files:
66
+ - ".gitignore"
67
+ - ".rspec"
68
+ - ".ruby-version"
69
+ - CHANGELOG.md
70
+ - Gemfile
71
+ - Gemfile.lock
72
+ - LICENSE
73
+ - README.md
74
+ - Rakefile
75
+ - examples/hello_world.rb
76
+ - lib/opt_parse_builder.rb
77
+ - lib/opt_parse_builder/argument.rb
78
+ - lib/opt_parse_builder/argument_builder.rb
79
+ - lib/opt_parse_builder/argument_bundle.rb
80
+ - lib/opt_parse_builder/argument_bundle_builder.rb
81
+ - lib/opt_parse_builder/argument_values.rb
82
+ - lib/opt_parse_builder/banner_argument.rb
83
+ - lib/opt_parse_builder/constant_argument.rb
84
+ - lib/opt_parse_builder/errors.rb
85
+ - lib/opt_parse_builder/formats_operand_name.rb
86
+ - lib/opt_parse_builder/has_value.rb
87
+ - lib/opt_parse_builder/null_argument.rb
88
+ - lib/opt_parse_builder/option_argument.rb
89
+ - lib/opt_parse_builder/optional_operand_argument.rb
90
+ - lib/opt_parse_builder/parser.rb
91
+ - lib/opt_parse_builder/parser_builder.rb
92
+ - lib/opt_parse_builder/required_operand_argument.rb
93
+ - lib/opt_parse_builder/separator_argument.rb
94
+ - lib/opt_parse_builder/splat_operand_argument.rb
95
+ - lib/opt_parse_builder/stable_sort.rb
96
+ - lib/opt_parse_builder/version.rb
97
+ - opt_parse_builder.gemspec
98
+ - rake/bundler.rake
99
+ - rake/default.rake
100
+ - rake/rdoc.rake
101
+ - rake/spec.rake
102
+ - rake/test.rake
103
+ homepage: https://github.com/wconrad/opt_parse_builder
104
+ licenses:
105
+ - MIT
106
+ metadata: {}
107
+ post_install_message:
108
+ rdoc_options: []
109
+ require_paths:
110
+ - lib
111
+ required_ruby_version: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ required_rubygems_version: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ requirements: []
122
+ rubygems_version: 3.1.4
123
+ signing_key:
124
+ specification_version: 4
125
+ summary: Builder DSL for optparse, with more
126
+ test_files: []