Class: Toys::Utils::Exec::Result
- Inherits:
-
Object
- Object
- Toys::Utils::Exec::Result
- Defined in:
- lib/toys/utils/exec.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.
800 801 802 |
# File 'lib/toys/utils/exec.rb', line 800 def captured_err @captured_err end |
#captured_out ⇒ String? (readonly)
The captured output string.
792 793 794 |
# File 'lib/toys/utils/exec.rb', line 792 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.
824 825 826 |
# File 'lib/toys/utils/exec.rb', line 824 def exception @exception end |
#name ⇒ Object (readonly)
The subcommand's name.
784 785 786 |
# File 'lib/toys/utils/exec.rb', line 784 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.
812 813 814 |
# File 'lib/toys/utils/exec.rb', line 812 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.
919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 |
# File 'lib/toys/utils/exec.rb', line 919 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.
895 896 897 898 |
# File 'lib/toys/utils/exec.rb', line 895 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.
837 838 839 |
# File 'lib/toys/utils/exec.rb', line 837 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.
862 863 864 |
# File 'lib/toys/utils/exec.rb', line 862 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.
851 852 853 |
# File 'lib/toys/utils/exec.rb', line 851 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.
872 873 874 |
# File 'lib/toys/utils/exec.rb', line 872 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.
883 884 885 886 |
# File 'lib/toys/utils/exec.rb', line 883 def success? code = exit_code !code.nil? && code.zero? end |