Class: Vedeu::Launcher
- Inherits:
-
Object
- Object
- Vedeu::Launcher
- Defined in:
- lib/vedeu/runtime/launcher.rb
Overview
This class ensures that STDIN, STDOUT and STDERR point to the correct places. It also handles the initial configuration of the application, the starting of the application, the handling of uncaught exceptions and finally the exiting of the application with the correct exit code.
Instance Attribute Summary collapse
-
#argv ⇒ Array<String>
readonly
protected
The command line arguments provided.
-
#exit_code ⇒ Fixnum
readonly
Return value indicating successful execution (0) or an error occurred (1).
Class Method Summary collapse
-
.execute!(argv = [], stdin = STDIN, stdout = STDOUT, stderr = STDERR, kernel = Kernel) ⇒ Object
:nocov:.
Instance Method Summary collapse
- #configuration ⇒ Vedeu::Configuration private
-
#execute! ⇒ void
Alters the STD to those requested by the client application, then starts the application.
-
#initialize(argv = [], stdin = STDIN, stdout = STDOUT, stderr = STDERR, kernel = Kernel) ⇒ Vedeu::Launcher
constructor
Returns a new instance of Vedeu::Launcher.
- #optionally_profile ⇒ void private
-
#terminate! ⇒ void
private
:nocov: Terminates the application after resetting $stdin, $stdout and $stderr.
Constructor Details
#initialize(argv = [], stdin = STDIN, stdout = STDOUT, stderr = STDERR, kernel = Kernel) ⇒ Vedeu::Launcher
Returns a new instance of Vedeu::Launcher.
35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/vedeu/runtime/launcher.rb', line 35 def initialize(argv = [], stdin = STDIN, stdout = STDOUT, stderr = STDERR, kernel = Kernel) @argv = argv @stdin = stdin @stdout = stdout @stderr = stderr @kernel = kernel @exit_code = 1 end |
Instance Attribute Details
#argv ⇒ Array<String> (readonly, protected)
Returns The command line arguments provided.
84 85 86 |
# File 'lib/vedeu/runtime/launcher.rb', line 84 def argv @argv end |
#exit_code ⇒ Fixnum (readonly)
Return value indicating successful execution (0) or an error occurred (1).
14 15 16 |
# File 'lib/vedeu/runtime/launcher.rb', line 14 def exit_code @exit_code end |
Class Method Details
.execute!(argv = [], stdin = STDIN, stdout = STDOUT, stderr = STDERR, kernel = Kernel) ⇒ Object
:nocov:
18 19 20 21 22 23 24 |
# File 'lib/vedeu/runtime/launcher.rb', line 18 def self.execute!(argv = [], stdin = STDIN, stdout = STDOUT, stderr = STDERR, kernel = Kernel) new(argv, stdin, stdout, stderr, kernel).execute! end |
Instance Method Details
#configuration ⇒ Vedeu::Configuration (private)
116 117 118 |
# File 'lib/vedeu/runtime/launcher.rb', line 116 def configuration Vedeu::Configuration end |
#execute! ⇒ void
This method returns an undefined value.
Alters the STD to those requested by the client application, then starts the application. If an uncaught exception occurs during the application runtime, we exit ungracefully with any error message(s).
If profiling is enabled, execute the application within the profiling context. At the moment, this simple uses ‘ruby-prof’ to profile the running application.
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/vedeu/runtime/launcher.rb', line 58 def execute! $stdin = @stdin $stdout = @stdout $stderr = @stderr optionally_profile { Vedeu::Runtime::Application.start(configuration) } @exit_code = 0 terminate! rescue StandardError => uncaught_exception output = if configuration.debug? uncaught_exception. + "\n" + uncaught_exception.backtrace.join("\n") else uncaught_exception. end Vedeu.log_stdout(type: :error, message: output) end |
#optionally_profile ⇒ void (private)
This method returns an undefined value.
89 90 91 92 93 94 95 96 97 |
# File 'lib/vedeu/runtime/launcher.rb', line 89 def optionally_profile if configuration.profile? Vedeu.profile { yield } else yield end end |
#terminate! ⇒ void (private)
This method returns an undefined value.
:nocov: Terminates the application after resetting $stdin, $stdout and $stderr.
104 105 106 107 108 109 110 111 112 |
# File 'lib/vedeu/runtime/launcher.rb', line 104 def terminate! Vedeu.log(message: 'Exiting gracefully.'.freeze) $stdin = STDIN $stdout = STDOUT $stderr = STDERR @kernel.exit(exit_code) end |