Class: Vedeu::Launcher

Inherits:
Object
  • Object
show all
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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(argv = [], stdin = STDIN, stdout = STDOUT, stderr = STDERR, kernel = Kernel) ⇒ Vedeu::Launcher

Returns a new instance of Vedeu::Launcher.

Parameters:

  • argv (Array) (defaults to: [])
  • stdin (IO) (defaults to: STDIN)
  • stdout (IO) (defaults to: STDOUT)
  • stderr (IO) (defaults to: STDERR)
  • kernel (Kernel) (defaults to: Kernel)


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

#argvArray<String> (readonly, protected)

Returns The command line arguments provided.

Returns:

  • (Array<String>)

    The command line arguments provided.



84
85
86
# File 'lib/vedeu/runtime/launcher.rb', line 84

def argv
  @argv
end

#exit_codeFixnum (readonly)

Return value indicating successful execution (0) or an error occurred (1).

Returns:

  • (Fixnum)

    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:

Parameters:

  • argv (Array) (defaults to: [])
  • stdin (IO) (defaults to: STDIN)
  • stdout (IO) (defaults to: STDOUT)
  • stderr (IO) (defaults to: STDERR)
  • kernel (Kernel) (defaults to: Kernel)


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

#configurationVedeu::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.message + "\n" +
             uncaught_exception.backtrace.join("\n")
           else
             uncaught_exception.message
           end

  Vedeu.log_stdout(type: :error, message: output)
end

#optionally_profilevoid (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