Class: Legate::ToolResult

Inherits:
Data
  • Object
show all
Defined in:
lib/legate/tool_result.rb

Overview

A typed, immutable result a tool’s #perform_execution may return instead of building the canonical ‘{ status:, result:/error_message:/job_id: }` hash by hand (R11, additive). Tool#execute normalizes it to that hash, so everything downstream is unchanged — this is purely an authoring convenience.

def perform_execution(params, _context)
  ToolResult.success("Hello, #{params[:name]}!")
end

Pairs with the Event#answer / #success? / #error? accessors.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#error_messageObject (readonly)

Returns the value of attribute error_message

Returns:

  • (Object)

    the current value of error_message



15
16
17
# File 'lib/legate/tool_result.rb', line 15

def error_message
  @error_message
end

#job_idObject (readonly)

Returns the value of attribute job_id

Returns:

  • (Object)

    the current value of job_id



15
16
17
# File 'lib/legate/tool_result.rb', line 15

def job_id
  @job_id
end

#messageObject (readonly)

Returns the value of attribute message

Returns:

  • (Object)

    the current value of message



15
16
17
# File 'lib/legate/tool_result.rb', line 15

def message
  @message
end

#resultObject (readonly)

Returns the value of attribute result

Returns:

  • (Object)

    the current value of result



15
16
17
# File 'lib/legate/tool_result.rb', line 15

def result
  @result
end

#statusObject (readonly)

Returns the value of attribute status

Returns:

  • (Object)

    the current value of status



15
16
17
# File 'lib/legate/tool_result.rb', line 15

def status
  @status
end

Class Method Details

.error(message) ⇒ ToolResult

Returns an error result.

Returns:



22
23
24
# File 'lib/legate/tool_result.rb', line 22

def self.error(message)
  new(status: :error, result: nil, error_message: message.to_s, job_id: nil, message: nil)
end

.pending(job_id:, message: nil) ⇒ ToolResult

Returns a pending (async) result referencing a job.

Returns:

  • (ToolResult)

    a pending (async) result referencing a job



27
28
29
# File 'lib/legate/tool_result.rb', line 27

def self.pending(job_id:, message: nil)
  new(status: :pending, result: nil, error_message: nil, job_id: job_id, message: message)
end

.success(value = nil) ⇒ ToolResult

Returns a successful result carrying an optional value.

Returns:

  • (ToolResult)

    a successful result carrying an optional value



17
18
19
# File 'lib/legate/tool_result.rb', line 17

def self.success(value = nil)
  new(status: :success, result: value, error_message: nil, job_id: nil, message: nil)
end

Instance Method Details

#error?Boolean

Returns:

  • (Boolean)


35
36
37
# File 'lib/legate/tool_result.rb', line 35

def error?
  status == :error
end

#pending?Boolean

Returns:

  • (Boolean)


39
40
41
# File 'lib/legate/tool_result.rb', line 39

def pending?
  status == :pending
end

#success?Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/legate/tool_result.rb', line 31

def success?
  status == :success
end

#to_hHash

The canonical result hash the rest of Legate speaks. Only the keys relevant to the status are included, matching what hand-built tool hashes produce.

Returns:

  • (Hash)


46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/legate/tool_result.rb', line 46

def to_h
  case status
  when :success
    { status: :success, result: result }
  when :error
    { status: :error, error_message: error_message }
  when :pending
    out = { status: :pending, job_id: job_id }
    out[:message] = message unless message.nil?
    out
  else
    { status: status }
  end
end