Class: Usage

Inherits:
Object
  • Object
show all
Defined in:
lib/Usage.rb

Overview

This is the main interface to this usage functionality. It operates by using method_missing to extract information about the command line arguments. Most all the functionality is implemented in the UsageMod::Base class with the Usage class being a wrapper around it to handle errors in a nice graceful fashion.

The main way to use it is to give the usage string as the argument to build the usage object like below:

usage = Usage.new “input_file output_file”

see the README for a more complete description of what can appear in that string.

Instance Method Summary collapse

Constructor Details

#initialize(*args, &block) ⇒ Usage

usage string as well.



976
977
978
979
980
981
982
983
984
985
986
987
988
# File 'lib/Usage.rb', line 976

def initialize(*args, &block)
	@usageBase = UsageMod::Base.new(self, *args)
	begin
		@usageBase.parse_args(&block)
	rescue UsageMod::LongUsageRequested
		die_long
	rescue UsageMod::Error => usageError
		$TRACE.debug 1, usageError.backtrace.join("\n")
		die(usageError.message)
	rescue
		raise
	end
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(symbol, *args, &block) ⇒ Object

forward all other calls to UsageMod::Base class



1038
1039
1040
1041
# File 'lib/Usage.rb', line 1038

def method_missing(symbol, *args, &block)
	$TRACE.debug 5, "Usage method missing: #{symbol}"
	@usageBase.send(symbol, *args, &block)
end

Instance Method Details

#ask_yes_no(str, default) ⇒ Object



1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
# File 'lib/Usage.rb', line 1043

def ask_yes_no(str, default)
	while true
		print str + " [" + (default == UsageMod::YES_RESPONSE ? "Yn" : "yN") + "]? "
		$stdout.flush
		s = $stdin.gets
		case s 
		when /^$/
			return default
		when /^y/i
			return UsageMod::YES_RESPONSE
		when /^n/i
			return UsageMod::NO_RESPONSE
		end
	end
end

#die(message) ⇒ Object

Allows the program to die in a graceful manner. It displays

ERROR: the error message

It then calls exit (so it doesn’t return)



997
998
999
1000
1001
1002
1003
# File 'lib/Usage.rb', line 997

def die(message)
		print_program_name
		print "ERROR: #{message}\n"
		print "\n"
		print_short_usage
		exit 1
end

#die_longObject

Allows the program to die in a graceful manner. It displays

ERROR: the error message

followed by the usage string. It then calls exit (so it doesn’t return)



1012
1013
1014
1015
1016
1017
# File 'lib/Usage.rb', line 1012

def die_long
	print_program_name
	print_short_usage
	print @usageBase.long_usage + "\n"
	exit 1
end

Prints out the program’s name in a graceful manner.

PROGRAM: program name



1024
1025
1026
# File 'lib/Usage.rb', line 1024

def print_program_name
		print "PROGRAM: #{$0}\n"
end

Print out the short usage string (without the options)



1031
1032
1033
# File 'lib/Usage.rb', line 1031

def print_short_usage
	print "USAGE: #{File.basename($0)} #{@usageBase.usage}\n"
end