optsparser_generator 4.4 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a46c488e646d9dd044a7532ded2d73e30b039a33941641b2a7869cad28e747f7
4
- data.tar.gz: 9aeeff83f3124af811a4e7ac07c36ce4d7482462d4bb1815dc5c2deddba52aac
3
+ metadata.gz: 7002bd5bc1ed12354e14e4db3d4d7e0ded00d2b6984fa94f72095c5ede3676b9
4
+ data.tar.gz: 5cd3e2448f62f62c5f57db2f37ee1f6cdbc719281bd62262a81766592cd572ef
5
5
  SHA512:
6
- metadata.gz: f42a1fbf5276adc74bbf913d397e7d2365de057f6be342b651cdd08b7d87d8948dc5d8f401a9d7c3bf8628b267613a9b31368fb2f53b4e33fa1ef84604a420ba
7
- data.tar.gz: 06f009faa14e5be34cf0069d03a58fd8e6682839e3c86c6432de5aa3aff0b9c44c7da074d36fac9d18bde9e40c37e2d2c4a625c184e07d7284232e2c4495aabc
6
+ metadata.gz: 1a57ebea15a0b6c8f6af4d5aa3b64c24e67135c01d81f4a926c0b3084723f833792431b1c293132c7dfbae96e5e35fdad9150409f53e9028f282b09da09b4680
7
+ data.tar.gz: 72f91bfe36beec53a0cdc85c4514bc5893966d17fe5263361be287aad2038f148ca0b7cc91b35c23ce00fdcfcf8e009bd1bf5bbeed28fcdc15d0358458c18fd8
data/README.md CHANGED
@@ -17,6 +17,7 @@ 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'
@@ -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)
@@ -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]
@@ -144,6 +151,7 @@ module OptionParserGenerator
144
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
 
@@ -151,6 +159,7 @@ module OptionParserGenerator
151
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: optsparser_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: '4.4'
4
+ version: '4.5'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marvin Zerulla