@@ -103,6 +103,7 @@ def self.option_globally_or_per_branch(opts = {})
103
103
datatype = opts . fetch ( :datatype , '' )
104
104
return option_globally_or_per_branch_string ( opts ) if datatype . is_a? ( String )
105
105
return option_globally_or_per_branch_array ( opts ) if datatype . is_a? ( Array )
106
+ return option_globally_or_per_branch_boolean ( opts ) if datatype . is_a? ( TrueClass ) || datatype . is_a? ( FalseClass )
106
107
raise ArgumentError , "option_globally_or_per_branch not equipped to handle #{ datatype . class } "
107
108
end
108
109
@@ -177,6 +178,40 @@ def self.option_globally_or_per_branch_array(opts = {})
177
178
end
178
179
end
179
180
181
+ # See description of `option_globally_or_per_branch`. This implements the logic for a boolean value.
182
+ # @param :parser [OptionParser object] The OptionParser argument
183
+ # @param :options [Hash] Options hash being constructed; this is modified in this method.
184
+ # @param :cli_name [String] Name of option on command line (e.g. puppet-binary)
185
+ # @param :option_name [Symbol] Name of option in the options hash (e.g. :puppet_binary)
186
+ # @param :desc [String] Description of option on the command line; will have "for the XX branch" appended
187
+ def self . option_globally_or_per_branch_boolean ( opts )
188
+ parser = opts . fetch ( :parser )
189
+ options = opts . fetch ( :options )
190
+ cli_name = opts . fetch ( :cli_name )
191
+ option_name = opts . fetch ( :option_name )
192
+ desc = opts . fetch ( :desc )
193
+
194
+ flag = cli_name
195
+ from_option = "from_#{ option_name } " . to_sym
196
+ to_option = "to_#{ option_name } " . to_sym
197
+ parser . on ( "--[no-]#{ flag } " , "#{ desc } globally" ) do |x |
198
+ translated = translate_option ( opts [ :translator ] , x )
199
+ options [ to_option ] = translated
200
+ options [ from_option ] = translated
201
+ post_process ( opts [ :post_process ] , options )
202
+ end
203
+ parser . on ( "--[no-]to-#{ flag } " , "#{ desc } for the to branch" ) do |x |
204
+ translated = translate_option ( opts [ :translator ] , x )
205
+ options [ to_option ] = translated
206
+ post_process ( opts [ :post_process ] , options )
207
+ end
208
+ parser . on ( "--[no-]from-#{ flag } " , "#{ desc } for the from branch" ) do |x |
209
+ translated = translate_option ( opts [ :translator ] , x )
210
+ options [ from_option ] = translated
211
+ post_process ( opts [ :post_process ] , options )
212
+ end
213
+ end
214
+
180
215
# If a validator was provided, run the validator on the supplied value. The validator is expected to
181
216
# throw an error if there is a problem. Note that the validator runs *before* the translator if both
182
217
# a validator and translator are supplied.
0 commit comments