optsparser_generator 4.0 → 4.5
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 +5 -5
- data/README.md +8 -6
- data/lib/optsparser_generator.rb +22 -13
- metadata +14 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7002bd5bc1ed12354e14e4db3d4d7e0ded00d2b6984fa94f72095c5ede3676b9
|
4
|
+
data.tar.gz: 5cd3e2448f62f62c5f57db2f37ee1f6cdbc719281bd62262a81766592cd572ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a57ebea15a0b6c8f6af4d5aa3b64c24e67135c01d81f4a926c0b3084723f833792431b1c293132c7dfbae96e5e35fdad9150409f53e9028f282b09da09b4680
|
7
|
+
data.tar.gz: 72f91bfe36beec53a0cdc85c4514bc5893966d17fe5263361be287aad2038f148ca0b7cc91b35c23ce00fdcfcf8e009bd1bf5bbeed28fcdc15d0358458c18fd8
|
data/README.md
CHANGED
@@ -17,11 +17,12 @@ os.default = 'value'
|
|
17
17
|
os.val = 123
|
18
18
|
os.val__values = [1, 1.5, 2, 123]
|
19
19
|
os.val__class = Numeric
|
20
|
+
os.val__required = true
|
20
21
|
os.bool = true
|
21
22
|
os.bool__help = 'description of argument'
|
22
23
|
os.bool__short = 'b'
|
23
24
|
os.test = "don't know"
|
24
|
-
os.
|
25
|
+
os.test__proc = Proc.new do |value|
|
25
26
|
puts value
|
26
27
|
"some-#{value}-conversion"
|
27
28
|
end
|
@@ -36,11 +37,12 @@ OptParseGen.parse(os) # takes ARGV or an array
|
|
36
37
|
```
|
37
38
|
|
38
39
|
## Special values
|
39
|
-
* __help
|
40
|
-
* __values
|
41
|
-
* __short
|
42
|
-
* __class
|
43
|
-
* __proc
|
40
|
+
* __help defines the description for a property
|
41
|
+
* __values defines possible values in an Array
|
42
|
+
* __short defines the short trigger
|
43
|
+
* __class defines the Class which OptionParser then tries to coerce to
|
44
|
+
* __proc a Proc which will be executed to compute the value
|
45
|
+
* __required parameter is required, raises error if missing
|
44
46
|
|
45
47
|
# Version numbers
|
46
48
|
I choose two digit version numbers.
|
data/lib/optsparser_generator.rb
CHANGED
@@ -5,11 +5,12 @@ require 'optparse'
|
|
5
5
|
module OptionParserGenerator
|
6
6
|
# Special postfixes for Hash keys
|
7
7
|
SPECIAL_POSTFIXES = [
|
8
|
+
'--class',
|
8
9
|
'--help',
|
9
|
-
'--
|
10
|
+
'--proc',
|
11
|
+
'--required',
|
10
12
|
'--short',
|
11
|
-
'--
|
12
|
-
'--proc'
|
13
|
+
'--values',
|
13
14
|
].freeze
|
14
15
|
|
15
16
|
# Raised when not given an OpenStruct
|
@@ -26,6 +27,8 @@ module OptionParserGenerator
|
|
26
27
|
# @api private
|
27
28
|
module OpenStructExtension
|
28
29
|
# extracts a special value from the openstruct
|
30
|
+
# @param key [String]
|
31
|
+
# @param string [String]
|
29
32
|
def special_value(key, string)
|
30
33
|
self["#{key}__#{string}"]
|
31
34
|
end
|
@@ -36,6 +39,7 @@ module OptionParserGenerator
|
|
36
39
|
# @todo preprocess data here instead of doing it adhoc
|
37
40
|
# @todo raise more exceptions
|
38
41
|
# @api private
|
42
|
+
# @param ostruct [OpenStruct]
|
39
43
|
def self.handle_arguments(ostruct)
|
40
44
|
unless ostruct.is_a?(OpenStruct)
|
41
45
|
raise WrongArgumentType, 'needs an OpenStruct'
|
@@ -51,14 +55,13 @@ module OptionParserGenerator
|
|
51
55
|
# @todo write documentation :(
|
52
56
|
# @todo split this up
|
53
57
|
# @param ostruct [OpenStruct] Default values with special values
|
54
|
-
# @param
|
55
|
-
# @
|
56
|
-
# :ignore_collisions ignore bool key collisions see OptionCollision
|
57
|
-
# :generate_no_help when set to true donesn't generates help command
|
58
|
+
# @param :ignore_collisions [Boolean] ignore bool key collisions see OptionCollision
|
59
|
+
# @param :generate_no_help [Boolean] when set to true donesn't generates help command
|
58
60
|
def self.[](ostruct, **options)
|
59
61
|
defaults = handle_arguments(ostruct)
|
60
62
|
|
61
63
|
optparser = OptionParser.new do |opts|
|
64
|
+
opts.instance_variable_set(:@required, {})
|
62
65
|
defaults.each_pair do |key, val|
|
63
66
|
trigger = key.to_s.tr('_', '-')
|
64
67
|
next if trigger.end_with?(*SPECIAL_POSTFIXES)
|
@@ -78,7 +81,7 @@ module OptionParserGenerator
|
|
78
81
|
end
|
79
82
|
else
|
80
83
|
klass = val.class
|
81
|
-
klass =
|
84
|
+
klass = val.is_a?(Integer) ? Integer : klass
|
82
85
|
klass = defaults.special_value(key, 'class') || klass
|
83
86
|
arguments.push klass
|
84
87
|
|
@@ -93,8 +96,12 @@ module OptionParserGenerator
|
|
93
96
|
block = proc
|
94
97
|
end
|
95
98
|
opts.on(*arguments) do |arg|
|
99
|
+
opts.instance_variable_get(:@required)[key] = true
|
96
100
|
opts.instance_variable_get(:@out)[key] = block.call(arg)
|
97
101
|
end
|
102
|
+
if defaults.special_value(key, 'required')
|
103
|
+
opts.instance_variable_get(:@required)[key] = false
|
104
|
+
end
|
98
105
|
end
|
99
106
|
|
100
107
|
unless options[:generate_no_help]
|
@@ -141,16 +148,18 @@ module OptionParserGenerator
|
|
141
148
|
# @api private
|
142
149
|
module OptParsePatch
|
143
150
|
# @return [OpenStruct]
|
144
|
-
def parse!(*params)
|
151
|
+
def parse!(*params, **opts)
|
145
152
|
@out = @defaults.dup
|
146
153
|
super
|
154
|
+
@required.reject{|k,v|v}.each{|k,v|raise OptionParser::MissingArgument, k}
|
147
155
|
@out
|
148
156
|
end
|
149
157
|
|
150
158
|
# @return [OpenStruct]
|
151
|
-
def parse(*params)
|
159
|
+
def parse(*params, **opts)
|
152
160
|
@out = @defaults.dup
|
153
161
|
super
|
162
|
+
@required.reject{|k,v|v}.each{|k,v|raise OptionParser::MissingArgument, k}
|
154
163
|
@out
|
155
164
|
end
|
156
165
|
end
|
@@ -162,14 +171,14 @@ module OptionParserGenerator
|
|
162
171
|
# @see OptionParserGenerator#[]
|
163
172
|
# @return [OpenStruct]
|
164
173
|
def self.parse(ostruct, argv, **opt)
|
165
|
-
self[ostruct, opt].parse(argv)
|
174
|
+
self[ostruct, **opt].parse(argv)
|
166
175
|
end
|
167
176
|
|
168
177
|
# Same as parse, removes parsed elements from argv
|
169
178
|
# @see OptionParserGenerator#parse
|
170
179
|
# @return [OpenStruct]
|
171
180
|
def self.parse!(ostruct, argv = ARGV, **opt)
|
172
|
-
self[ostruct, opt].parse!(argv)
|
181
|
+
self[ostruct, **opt].parse!(argv)
|
173
182
|
end
|
174
183
|
end
|
175
184
|
# Object alias
|
@@ -184,7 +193,7 @@ OptParseGen = OptionParserGenerator
|
|
184
193
|
# @return [OptionParser]
|
185
194
|
# @see OptionParserGenerator
|
186
195
|
def OptionParserGenerator(arg, **opt)
|
187
|
-
OptionParserGenerator[arg, opt]
|
196
|
+
OptionParserGenerator[arg, **opt]
|
188
197
|
end
|
189
198
|
alias OptParseGen OptionParserGenerator
|
190
199
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: optsparser_generator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '4.
|
4
|
+
version: '4.5'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marvin Zerulla
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -16,7 +16,7 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "<"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '13'
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: 11.2.0
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - "<"
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
29
|
+
version: '13'
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 11.2.0
|
@@ -37,7 +37,7 @@ dependencies:
|
|
37
37
|
- - "<"
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
version: '4'
|
40
|
-
- - "
|
40
|
+
- - ">="
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: 3.5.0
|
43
43
|
type: :development
|
@@ -47,21 +47,21 @@ dependencies:
|
|
47
47
|
- - "<"
|
48
48
|
- !ruby/object:Gem::Version
|
49
49
|
version: '4'
|
50
|
-
- - "
|
50
|
+
- - ">="
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: 3.5.0
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: rubocop
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
56
56
|
requirements:
|
57
|
-
- - "
|
57
|
+
- - ">="
|
58
58
|
- !ruby/object:Gem::Version
|
59
59
|
version: '0'
|
60
60
|
type: :development
|
61
61
|
prerelease: false
|
62
62
|
version_requirements: !ruby/object:Gem::Requirement
|
63
63
|
requirements:
|
64
|
-
- - "
|
64
|
+
- - ">="
|
65
65
|
- !ruby/object:Gem::Version
|
66
66
|
version: '0'
|
67
67
|
- !ruby/object:Gem::Dependency
|
@@ -104,8 +104,8 @@ dependencies:
|
|
104
104
|
- - ">="
|
105
105
|
- !ruby/object:Gem::Version
|
106
106
|
version: '0.8'
|
107
|
-
description:
|
108
|
-
email:
|
107
|
+
description:
|
108
|
+
email:
|
109
109
|
executables: []
|
110
110
|
extensions: []
|
111
111
|
extra_rdoc_files:
|
@@ -119,7 +119,7 @@ homepage: https://github.com/madblobfish/optionparser-generator
|
|
119
119
|
licenses:
|
120
120
|
- AGPL-1.0
|
121
121
|
metadata: {}
|
122
|
-
post_install_message:
|
122
|
+
post_install_message:
|
123
123
|
rdoc_options: []
|
124
124
|
require_paths:
|
125
125
|
- lib
|
@@ -134,9 +134,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
134
134
|
- !ruby/object:Gem::Version
|
135
135
|
version: '0'
|
136
136
|
requirements: []
|
137
|
-
|
138
|
-
|
139
|
-
signing_key:
|
137
|
+
rubygems_version: 3.2.15
|
138
|
+
signing_key:
|
140
139
|
specification_version: 4
|
141
140
|
summary: Generates OptionParser using an OpenStruct
|
142
141
|
test_files: []
|