@@ -24,6 +24,10 @@ def assert_string(key, value)
2424 assert value . is_a? ( String ) , "#{ key } must be a string"
2525 end
2626
27+ def assert_optional_string ( key , value )
28+ assert_string key , value if value
29+ end
30+
2731 def assert_boolean ( key , value )
2832 assert [ true , false , nil ] . include? ( value ) , "#{ key } must be a boolean"
2933 end
@@ -43,6 +47,7 @@ def assert_hash(key, value)
4347 end
4448
4549 def assert_version ( key , value )
50+ return unless value
4651 assert [ String , Integer , Float ] . include? ( value . class ) ,
4752 "#{ key } must be a string or a number"
4853 end
@@ -62,9 +67,9 @@ def assert_extensible(key, value)
6267 def assert_arg ( key , value )
6368 assert_hash key , value
6469 assert_string "#{ key } .name" , value [ 'name' ]
65- assert_string "#{ key } .help" , value [ 'help' ] if value [ 'help' ]
66- assert_string "#{ key } .default" , value [ 'default' ] if value [ 'default' ]
67- assert_string "#{ key } .validate" , value [ 'validate' ] if value [ 'validate' ]
70+ assert_optional_string "#{ key } .help" , value [ 'help' ]
71+ assert_optional_string "#{ key } .default" , value [ 'default' ]
72+ assert_optional_string "#{ key } .validate" , value [ 'validate' ]
6873 assert_boolean "#{ key } .required" , value [ 'required' ]
6974
7075 assert_array "#{ key } .allowed" , value [ 'allowed' ] , of : :string
@@ -74,23 +79,22 @@ def assert_flag(key, value)
7479 assert_hash key , value
7580 assert value [ 'short' ] || value [ 'long' ] , "#{ key } must have at least one of long or short name"
7681
77- assert_string "#{ key } .long" , value [ 'long' ] if value [ 'long' ]
78- assert_string "#{ key } .short" , value [ 'short' ] if value [ 'short' ]
79- assert_string "#{ key } .help" , value [ 'help' ] if value [ 'help' ]
80- assert_string "#{ key } .arg" , value [ 'arg' ] if value [ 'arg' ]
81-
82- assert_string "#{ key } .default" , value [ 'default' ] if value [ 'default' ]
83- assert_string "#{ key } .validate" , value [ 'validate' ] if value [ 'validate' ]
84- assert_boolean "#{ key } .required" , value [ 'required' ]
82+ assert_optional_string "#{ key } .long" , value [ 'long' ]
83+ assert_optional_string "#{ key } .short" , value [ 'short' ]
84+ assert_optional_string "#{ key } .help" , value [ 'help' ]
85+ assert_optional_string "#{ key } .arg" , value [ 'arg' ]
86+ assert_optional_string "#{ key } .default" , value [ 'default' ]
87+ assert_optional_string "#{ key } .validate" , value [ 'validate' ]
8588
89+ assert_boolean "#{ key } .required" , value [ 'required' ]
8690 assert_array "#{ key } .allowed" , value [ 'allowed' ] , of : :string
8791 end
8892
8993 def assert_env_var ( key , value )
9094 assert_hash key , value
9195 assert_string "#{ key } .name" , value [ 'name' ]
92- assert_string "#{ key } .help" , value [ 'help' ] if value [ 'help' ]
93- assert_string "#{ key } .default" , value [ 'default' ] if value [ 'default' ]
96+ assert_optional_string "#{ key } .help" , value [ 'help' ]
97+ assert_optional_string "#{ key } .default" , value [ 'default' ]
9498 assert_boolean "#{ key } .required" , value [ 'required' ]
9599 end
96100
@@ -101,13 +105,13 @@ def assert_command(key, value)
101105 refute value [ 'commands' ] && value [ 'flags' ] , "#{ key } cannot have both commands and flags"
102106
103107 assert_string "#{ key } .name" , value [ 'name' ]
104- assert_string "#{ key } .short" , value [ 'short' ] if value [ 'short' ]
105- assert_string "#{ key } .help" , value [ 'help' ] if value [ 'help' ]
106- assert_string "#{ key } .footer" , value [ 'footer' ] if value [ 'footer' ]
107- assert_string "#{ key } .group" , value [ 'group' ] if value [ 'group' ]
108+ assert_optional_string "#{ key } .short" , value [ 'short' ]
109+ assert_optional_string "#{ key } .help" , value [ 'help' ]
110+ assert_optional_string "#{ key } .footer" , value [ 'footer' ]
111+ assert_optional_string "#{ key } .group" , value [ 'group' ]
112+
108113 assert_boolean "#{ key } .default" , value [ 'default' ]
109-
110- assert_version "#{ key } .version" , value [ 'version' ] if value [ 'version' ]
114+ assert_version "#{ key } .version" , value [ 'version' ]
111115 assert_catch_all "#{ key } .catch_all" , value [ 'catch_all' ]
112116 assert_extensible "#{ key } .extensible" , value [ 'extensible' ]
113117
0 commit comments