Class: TaskJuggler::Tj3AppBase
- Includes:
- MessageHandler
- Defined in:
- lib/taskjuggler/Tj3AppBase.rb
Instance Method Summary collapse
-
#initialize ⇒ Tj3AppBase
constructor
A new instance of Tj3AppBase.
- #main(argv = ARGV) ⇒ Object
- #processArguments(argv) ⇒ Object
Methods included from MessageHandler
#critical, #debug, #error, #fatal, #info, #warning
Constructor Details
#initialize ⇒ Tj3AppBase
Returns a new instance of Tj3AppBase.
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/taskjuggler/Tj3AppBase.rb', line 29 def initialize # Indent and width of options. The deriving class may has to change # this. @optsSummaryWidth = 22 @optsSummaryIndent = 5 # Show some progress information by default @silent = false @configFile = nil @mandatoryArgs = '' @mininumRubyVersion = '1.9.2' # If stdout is not a tty, we don't use ANSI escape sequences to color # the terminal output. Additionally, we have the --no-color option to # force colors off in case this does not work properly. Term::ANSIColor.coloring = STDOUT.tty? # Make sure the MessageHandler is set to default values. MessageHandlerInstance.instance.reset end |
Instance Method Details
#main(argv = ARGV) ⇒ Object
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 |
# File 'lib/taskjuggler/Tj3AppBase.rb', line 123 def main(argv = ARGV) if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new(@mininumRubyVersion) error('tj3app_ruby_version', 'This program requires at least Ruby version ' + "#{@mininumRubyVersion}!") end # Install signal handler to exit gracefully on CTRL-C. intHandler = Kernel.trap('INT') do begin fatal('tj3app_user_abort', "Aborting on user request!") rescue RuntimeError exit 1 end end retVal = 0 begin args = processArguments(argv) # If DEBUG mode has been enabled, we restore the INT trap handler again # to get Ruby backtraces. Kernel.trap('INT', intHandler) if $DEBUG unless @silent puts "#{AppConfig.softwareName} v#{AppConfig.version} - " + "#{AppConfig.packageInfo}\n\n" + "Copyright (c) #{AppConfig.copyright.join(', ')}\n" + " by #{AppConfig..join(', ')}\n\n" + "#{AppConfig.license}\n" end @rc = RuntimeConfig.new(AppConfig.packageName, @configFile) begin MessageHandlerInstance.instance.trapSetup = true retVal = appMain(args) MessageHandlerInstance.instance.trapSetup = false rescue TjRuntimeError # We have hit a situation that we can't recover from. A message # was severed via the MessageHandler to inform the user and we now # abort the program. return 1 end rescue Exception => e if e.is_a?(SystemExit) || e.is_a?(Interrupt) # Don't show backtrace on user interrupt unless we are in debug mode. $stderr.puts e.backtrace.join("\n") if $DEBUG 1 else fatal('crash_trap', "#{e}\n#{e.backtrace.join("\n")}\n\n" + "#{'*' * 79}\nYou have triggered a bug in " + "#{AppConfig.softwareName} version #{AppConfig.version}!\n" + "Please see the user manual on how to get this bug fixed!\n" + "http://www.taskjuggler.org/tj3/manual/Reporting_Bugs.html#" + "Reporting_Bugs_and_Feature_Requests\n" + "#{'*' * 79}\n") end end # Exit value in case everything was fine. retVal end |
#processArguments(argv) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/taskjuggler/Tj3AppBase.rb', line 49 def processArguments(argv) @opts = OptionParser.new @opts.summary_width = @optsSummaryWidth @opts.summary_indent = ' ' * @optsSummaryIndent @opts. = "Copyright (c) #{AppConfig.copyright.join(', ')}\n" + " by #{AppConfig..join(', ')}\n\n" + "#{AppConfig.license}\n" + "For more info about #{AppConfig.softwareName} see " + "#{AppConfig.contact}\n\n" + "Usage: #{AppConfig.appName} [options] " + "#{@mandatoryArgs}\n\n" @opts.separator "\nOptions:" @opts.on('-c', '--config <FILE>', String, format('Use the specified YAML configuration file')) do |arg| @configFile = arg end @opts.on('--silent', format("Don't show program and progress information")) do @silent = true MessageHandlerInstance.instance.outputLevel = :warning TaskJuggler::Log.silent = true end @opts.on('--no-color', format(<<'EOT' Don't use ANSI contol sequences to color the terminal output. Colors should only be used when spooling to an ANSI terminal. In case the detection fails, you can use this option to force colors to be off. EOT )) do Term::ANSIColor::coloring = false end @opts.on('--debug', format('Enable Ruby debug mode')) do $DEBUG = true end yield @opts.on_tail('-h', '--help', format('Show this message')) do puts @opts.to_s quit end @opts.on_tail('--version', format('Show version info')) do # Display the software name and version in GNU format # as expected by help2man # https://www.gnu.org/prep/standards/standards.html#g_t_002d_002dversion puts "#{AppConfig.appName} (#{AppConfig.softwareName}) #{AppConfig.version}\n" # To also display the copyright and license statements in GNU format # uncomment the following and remove the equivalent statements from # --help # + #<<'EOT' #Copyright (C) 2016 Chris Schlaeger <[email protected]> #License GPLv2: GNU GPL version 2 <http://gnu.org/licenses/gpl.html> #This is free software; you can redistribute it and/or modify it under #the terms of version 2 of the GNU General Public License as published by the #Free Software Foundation. # #For more info about TaskJuggler see http://www.taskjuggler.org #EOT quit end begin files = @opts.parse(argv) rescue OptionParser::ParseError => msg puts @opts.to_s + "\n" error('tj3app_bad_cmd_options', msg.) end files end |