Class: Sevgi::Executor::Result

Inherits:
Data
  • Object
show all
Defined in:
lib/sevgi/executor/result.rb

Overview

Describes the outcome of one executor invocation.

A successful result has a value and no error. A captured script, file, or library failure has an Error and may retain a value produced before the failure. The source stack is an immutable snapshot in load order; it is never shared with the executor's internal mutable state.

Examples:

Inspect successful execution

result = Sevgi.execute("6 * 7")
result.success? #=> true
result.value    #=> 42

Inspect a captured failure

result = Sevgi.execute("missing", file: "drawing.sevgi")
result.error?       #=> true
result.error.cause  #=> #<NameError ...>
result.stack        #=> ["drawing.sevgi"]

See Also:

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(value:, error:, stack:) ⇒ void

Creates an execution result.

Parameters:

  • value (Object, nil)

    last value produced before execution finished

  • error (Sevgi::Executor::Error, nil)

    captured execution failure

  • stack (Array<String>)

    source files visited in load order



39
40
41
# File 'lib/sevgi/executor/result.rb', line 39

def initialize(value:, error:, stack:)
  super(value:, error:, stack: Array(stack).map { it.dup.freeze }.freeze)
end

Instance Attribute Details

#errorSevgi::Executor::Error? (readonly)

Returns captured failure, or nil after successful execution.

Returns:



26
27
28
# File 'lib/sevgi/executor/result.rb', line 26

def error
  @error
end

#stackArray<String> (readonly)

Returns frozen owned source-path snapshot in load order.

Returns:

  • (Array<String>)

    frozen owned source-path snapshot in load order



26
27
28
# File 'lib/sevgi/executor/result.rb', line 26

def stack
  @stack
end

#valueObject? (readonly)

Returns last value produced, or nil when no value was produced.

Returns:

  • (Object, nil)

    last value produced, or nil when no value was produced



26
27
28
# File 'lib/sevgi/executor/result.rb', line 26

def value
  @value
end

Instance Method Details

#error?Boolean

Reports whether execution captured an error.

Returns:

  • (Boolean)

    true when execution failed



51
# File 'lib/sevgi/executor/result.rb', line 51

def error? = !success?

#success?Boolean

Reports whether execution completed without a captured error.

Returns:

  • (Boolean)

    true when execution succeeded



47
# File 'lib/sevgi/executor/result.rb', line 47

def success? = error.nil?