Class: Boxcars::Result

Inherits:
Object
  • Object
show all
Defined in:
lib/boxcars/result.rb

Overview

used by Boxcars to return structured result and additional context

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(status:, answer: nil, explanation: nil, suggestions: nil, **added_context) ⇒ Result

Returns a new instance of Result.

Parameters:

  • status (Symbol)

    :ok or :error

  • answer (String) (defaults to: nil)

    The answer to the question

  • explanation (String) (defaults to: nil)

    The explanation of the answer

  • suggestions (Array<String>) (defaults to: nil)

    The next suggestions for the user

  • added_context (Hash)

    Any additional context to add to the result



13
14
15
16
17
18
19
# File 'lib/boxcars/result.rb', line 13

def initialize(status:, answer: nil, explanation: nil, suggestions: nil, **added_context)
  @status = status
  @answer = answer || explanation
  @explanation = explanation
  @suggestions = suggestions
  @added_context = added_context
end

Instance Attribute Details

#added_contextObject

Returns the value of attribute added_context.



6
7
8
# File 'lib/boxcars/result.rb', line 6

def added_context
  @added_context
end

#answerObject

Returns the value of attribute answer.



6
7
8
# File 'lib/boxcars/result.rb', line 6

def answer
  @answer
end

#explanationObject

Returns the value of attribute explanation.



6
7
8
# File 'lib/boxcars/result.rb', line 6

def explanation
  @explanation
end

#statusObject

Returns the value of attribute status.



6
7
8
# File 'lib/boxcars/result.rb', line 6

def status
  @status
end

#suggestionsObject

Returns the value of attribute suggestions.



6
7
8
# File 'lib/boxcars/result.rb', line 6

def suggestions
  @suggestions
end

Class Method Details

.from_error(error, **kwargs) ⇒ Boxcars::Result

create a new Result from an error string

Parameters:

  • error (String)

    The error to use for the result

  • kwargs (Hash)

    Any additional kwargs to pass to the result

Returns:



61
62
63
64
65
66
# File 'lib/boxcars/result.rb', line 61

def self.from_error(error, **kwargs)
  answer = error
  answer = Regexp.last_match(:answer) if answer =~ /^Error:\s*(?<answer>.*)$/
  explanation = "Error: #{answer}"
  new(status: :error, answer: answer, explanation: explanation, **kwargs)
end

.from_text(text, **kwargs) ⇒ Boxcars::Result

create a new Result from a text string

Parameters:

  • text (String)

    The text to use for the result

  • kwargs (Hash)

    Any additional kwargs to pass to the result

Returns:



50
51
52
53
54
55
# File 'lib/boxcars/result.rb', line 50

def self.from_text(text, **kwargs)
  answer = text.delete_prefix('"').delete_suffix('"').strip
  answer = Regexp.last_match(:answer) if answer =~ /^Answer:\s*(?<answer>.*)$/
  explanation = "Answer: #{answer}"
  new(status: :ok, answer: answer, explanation: explanation, **kwargs)
end

Instance Method Details

#to_answerString

Returns The answer data to the question.

Returns:

  • (String)

    The answer data to the question



42
43
44
# File 'lib/boxcars/result.rb', line 42

def to_answer
  answer
end

#to_hHash

Returns The result as a hash.

Returns:

  • (Hash)

    The result as a hash



22
23
24
25
26
27
28
29
# File 'lib/boxcars/result.rb', line 22

def to_h
  {
    status: status,
    answer: answer,
    explanation: explanation,
    suggestions: suggestions
  }.merge(added_context).compact
end

#to_json(*args) ⇒ String

Returns The result as a json string.

Returns:

  • (String)

    The result as a json string



32
33
34
# File 'lib/boxcars/result.rb', line 32

def to_json(*args)
  JSON.generate(to_h, *args)
end

#to_sString

Returns An explanation of the result.

Returns:

  • (String)

    An explanation of the result



37
38
39
# File 'lib/boxcars/result.rb', line 37

def to_s
  explanation
end