From c4c5f6021773b4a2429b2df4dbf2a2595b3e32a9 Mon Sep 17 00:00:00 2001 From: Michael Schutte Date: Sun, 29 Apr 2007 20:17:12 +0200 Subject: [PATCH] Better option handling. - Make integer options actually work. - Allow "clearing" options by overriding them with empty values. --- clw | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/clw b/clw index 4d7bb5f..2696b93 100755 --- a/clw +++ b/clw @@ -139,21 +139,30 @@ class CommandLineParser option = $2 if @@known_options.include? option type = @@known_options[option] + if negate and type != :boolean raise Error, "Tried to assign boolean value to " + "non-boolean option: #{arg}" elsif type == :boolean @options[option] = (not negate) elsif type == :integer - if value !~ /^\d+$/ + value = @args.shift + if value.nil? + raise Error, "Option needs a value: #{arg}" + elsif value.empty? + @options[option] = nil + elsif value !~ /^\d+$/ raise Error, "Tried to assign string value to " + "integer option: #{arg}" + else + @options[option] = value.to_i end - @options[option] = value.to_i elsif type == :string value = @args.shift - if value.nil? or value.empty? + if value.nil? raise Error, "Option needs a value: #{arg}" + elsif value.empty? + @options[option] = nil else @options[option] = value end @@ -171,7 +180,7 @@ class CommandLineParser # Post-process @options.each_pair do |key, value| if value.is_a? String - @options[key] = value.gsub(/\{(.*)\}/) { + value = value.gsub(/\{(.*)\}/) { case $1 when "open": "{" when "close": "}" @@ -187,6 +196,7 @@ class CommandLineParser else @options[key].to_s end } + @options[key] = value.empty? ? nil : value end end end @@ -230,7 +240,9 @@ class CommandLineParser if @@known_options.include? key type = @@known_options[key] - if type == :boolean + if value.is_a? String and value.empty? + @options[key] = nil + elsif type == :boolean unless value == true or value == false raise Error, "#{path}: #{key} is a boolean option" end @@ -241,9 +253,6 @@ class CommandLineParser end @options[key] = value elsif type == :string - if value.is_a? String and value.empty? - raise Error, "#{path}: #{key} is empty" - end @options[key] = value.to_s end end -- 2.11.4.GIT