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.
Files changed (4) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +8 -6
  3. data/lib/optsparser_generator.rb +22 -13
  4. metadata +14 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 5121915ca357fd8dfa3d8bfb7c292bc435e46fce
4
- data.tar.gz: 218b5d132ab436ae1595b510f51e96d07d261ebf
2
+ SHA256:
3
+ metadata.gz: 7002bd5bc1ed12354e14e4db3d4d7e0ded00d2b6984fa94f72095c5ede3676b9
4
+ data.tar.gz: 5cd3e2448f62f62c5f57db2f37ee1f6cdbc719281bd62262a81766592cd572ef
5
5
  SHA512:
6
- metadata.gz: 2ee9faa906c0d85efc1f83f03ba58067869c17f3750bf268900724f57888fe4438b2c9a6c44c3ec24446cd8833e47ddb994aa47f21ed185cc2873fe6eefb55b1
7
- data.tar.gz: e9835ec3a8e9a6fb1fcbad12b25b392b2968a6ef1a91198b76f89accf80343ef3d6a3055e6ee7098d824e605cfa0ca884f5796048095d27cd0bfba36be0af726
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.test_proc = Proc.new do |value|
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 defines the description for a property
40
- * __values defines possible values in an Array
41
- * __short defines the short trigger
42
- * __class defines the Class which OptionParser then tries to coerce to
43
- * __proc a Proc which will be executed to compute the value
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.
@@ -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
- '--values',
10
+ '--proc',
11
+ '--required',
10
12
  '--short',
11
- '--class',
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 options [Hash]
55
- # @option options [Boolean]
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 = klass.equal?(Fixnum) ? Integer : 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.0'
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: 2016-11-02 00:00:00.000000000 Z
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: '12'
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: '12'
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
- rubyforge_project:
138
- rubygems_version: 2.5.1
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: []