optsparser_generator 4.0 → 4.5

Sign up to get free protection for your applications and to get access to all the features.
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: []