Class: ExecService::Result
- Inherits:
-
Object
- Object
- ExecService::Result
- Defined in:
- lib/exec_service/result.rb
Overview
The result returned from a subcommand execution. This includes the identifying name of the execution (if any), the result status of the execution, and any captured stream output.
Possible result statuses are:
- The process failed to start. #failed? will return true, and #exception will return an exception describing the failure (often an errno).
- The process executed and exited with a normal exit code. Either #success? or #error? will return true, and #exit_code will return the numeric exit code.
- The process executed but was terminated by an uncaught signal. #signaled? will return true, and #signal_code will return the numeric signal code.
Instance Attribute Summary collapse
-
#captured_err ⇒ String?
readonly
The captured error string.
-
#captured_out ⇒ String?
readonly
The captured output string.
-
#exception ⇒ Exception?
readonly
The exception raised if a process couldn't be started.
-
#name ⇒ Object
readonly
The subcommand's name.
-
#status ⇒ Process::Status?
readonly
The Ruby process status object, providing various information about the ending state of the process.
Instance Method Summary collapse
-
#effective_code ⇒ Integer
Returns an "effective" exit code, which is always an integer if the process has terminated for any reason.
-
#error? ⇒ boolean
Returns true if the subprocess terminated with a nonzero status, or false if the process failed to start, terminated due to a signal, or returned a zero status.
-
#exit_code ⇒ Integer?
The numeric status code for a process that exited normally,.
-
#failed? ⇒ boolean
Returns true if the subprocess failed to start, or false if the process was able to execute.
-
#signal_code ⇒ Integer?
(also: #term_signal)
The numeric signal code that caused process termination.
-
#signaled? ⇒ boolean
Returns true if the subprocess terminated due to an unhandled signal, or false if the process failed to start or exited normally.
-
#success? ⇒ boolean
Returns true if the subprocess terminated with a zero status, or false if the process failed to start, terminated due to a signal, or returned a nonzero status.
Instance Attribute Details
#captured_err ⇒ String? (readonly)
The captured error string.
43 44 45 |
# File 'lib/exec_service/result.rb', line 43 def captured_err @captured_err end |
#captured_out ⇒ String? (readonly)
The captured output string.
35 36 37 |
# File 'lib/exec_service/result.rb', line 35 def captured_out @captured_out end |
#exception ⇒ Exception? (readonly)
The exception raised if a process couldn't be started.
Exactly one of #exception and #status will be non-nil. Exactly one of #exception, #exit_code, or #signal_code will be non-nil.
67 68 69 |
# File 'lib/exec_service/result.rb', line 67 def exception @exception end |
#name ⇒ Object (readonly)
The subcommand's name.
27 28 29 |
# File 'lib/exec_service/result.rb', line 27 def name @name end |
#status ⇒ Process::Status? (readonly)
The Ruby process status object, providing various information about the ending state of the process.
Exactly one of #exception and #status will be non-nil.
55 56 57 |
# File 'lib/exec_service/result.rb', line 55 def status @status end |
Instance Method Details
#effective_code ⇒ Integer
Returns an "effective" exit code, which is always an integer if the process has terminated for any reason. In general, this code will be:
- The same as #exit_code if the process terminated normally with an exit code,
- The convention of
128+signalnumif the process terminated due to a signal, - The convention of 126 if the process could not start due to lack of execution permissions,
- The convention of 127 if the process could not start because the command was not recognized or could not be found, or
- An undefined value between 1 and 255 for other failures.
Note that the normal exit code and signal number cases are stable, but any other cases are subject to change on future releases.
162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
# File 'lib/exec_service/result.rb', line 162 def effective_code code = exit_code return code unless code.nil? code = signal_code return code + 128 unless code.nil? case exception when ::Errno::ENOENT 127 else # This is the intended result for ENOEXEC/EACCES. # For now, any other error (e.g. EBADARCH on MacOS) will also map # to this result. We can change this in the future since the # documentation explicitly allows it. 126 end end |
#error? ⇒ boolean
Returns true if the subprocess terminated with a nonzero status, or false if the process failed to start, terminated due to a signal, or returned a zero status.
138 139 140 141 |
# File 'lib/exec_service/result.rb', line 138 def error? code = exit_code !code.nil? && !code.zero? end |
#exit_code ⇒ Integer?
The numeric status code for a process that exited normally,
Exactly one of #exception, #exit_code, or #signal_code will be non-nil.
80 81 82 |
# File 'lib/exec_service/result.rb', line 80 def exit_code status&.exitstatus end |
#failed? ⇒ boolean
Returns true if the subprocess failed to start, or false if the process was able to execute.
105 106 107 |
# File 'lib/exec_service/result.rb', line 105 def failed? status.nil? end |
#signal_code ⇒ Integer? Also known as: term_signal
The numeric signal code that caused process termination.
Exactly one of #exception, #exit_code, or #signal_code will be non-nil.
94 95 96 |
# File 'lib/exec_service/result.rb', line 94 def signal_code status&.termsig end |
#signaled? ⇒ boolean
Returns true if the subprocess terminated due to an unhandled signal, or false if the process failed to start or exited normally.
115 116 117 |
# File 'lib/exec_service/result.rb', line 115 def signaled? !signal_code.nil? end |
#success? ⇒ boolean
Returns true if the subprocess terminated with a zero status, or false if the process failed to start, terminated due to a signal, or returned a nonzero status.
126 127 128 129 |
# File 'lib/exec_service/result.rb', line 126 def success? code = exit_code !code.nil? && code.zero? end |