Class: Ask::Result
- Inherits:
-
Object
- Object
- Ask::Result
- Defined in:
- lib/ask/result.rb
Overview
Constant Summary collapse
- STATUSES =
%i[success error aborted blocked short_circuited].freeze
Instance Attribute Summary collapse
-
#content ⇒ Object?
readonly
The result content.
-
#error ⇒ Object?
readonly
The underlying error, if any.
-
#metadata ⇒ Hash
readonly
Additional metadata.
-
#status ⇒ Symbol
readonly
The status (:success, :error, :aborted, :blocked, :short_circuited).
Factory Methods collapse
-
.aborted(reason = "Aborted") ⇒ Ask::Result
Create an aborted result (cancelled by sibling failure).
-
.blocked(reason) ⇒ Ask::Result
Create a blocked result (prevented by a hook or guard).
-
.failure(message, error: nil, metadata: {}) ⇒ Ask::Result
Create a failure result.
-
.success(content = nil, metadata: {}) ⇒ Ask::Result
Create a successful result.
Instance Method Summary collapse
-
#aborted? ⇒ Boolean
True if status is :aborted.
-
#blocked? ⇒ Boolean
True if status is :blocked.
-
#error? ⇒ Boolean
True if status is :error.
-
#initialize(content: nil, status: :success, error: nil, metadata: {}) ⇒ Result
constructor
A new instance of Result.
-
#inspect ⇒ String
Human-readable representation.
-
#success? ⇒ Boolean
True if status is :success.
-
#to_h ⇒ Hash
Serialized representation.
-
#to_s ⇒ String
The content as a string.
Constructor Details
#initialize(content: nil, status: :success, error: nil, metadata: {}) ⇒ Result
Returns a new instance of Result.
61 62 63 64 65 66 67 |
# File 'lib/ask/result.rb', line 61 def initialize(content: nil, status: :success, error: nil, metadata: {}) @content = content @status = validate_status!(status) @error = error @metadata = .dup.freeze freeze end |
Instance Attribute Details
#content ⇒ Object? (readonly)
Returns the result content.
50 51 52 |
# File 'lib/ask/result.rb', line 50 def content @content end |
#error ⇒ Object? (readonly)
Returns the underlying error, if any.
56 57 58 |
# File 'lib/ask/result.rb', line 56 def error @error end |
#metadata ⇒ Hash (readonly)
Returns additional metadata.
59 60 61 |
# File 'lib/ask/result.rb', line 59 def @metadata end |
#status ⇒ Symbol (readonly)
Returns the status (:success, :error, :aborted, :blocked, :short_circuited).
53 54 55 |
# File 'lib/ask/result.rb', line 53 def status @status end |
Class Method Details
.aborted(reason = "Aborted") ⇒ Ask::Result
Create an aborted result (cancelled by sibling failure).
36 37 38 |
# File 'lib/ask/result.rb', line 36 def aborted(reason = "Aborted") new(content: reason, status: :aborted) end |
.blocked(reason) ⇒ Ask::Result
Create a blocked result (prevented by a hook or guard).
43 44 45 |
# File 'lib/ask/result.rb', line 43 def blocked(reason) new(content: reason, status: :blocked) end |
.failure(message, error: nil, metadata: {}) ⇒ Ask::Result
Create a failure result.
29 30 31 |
# File 'lib/ask/result.rb', line 29 def failure(, error: nil, metadata: {}) new(content: , status: :error, error: error, metadata: ) end |
.success(content = nil, metadata: {}) ⇒ Ask::Result
Create a successful result.
20 21 22 |
# File 'lib/ask/result.rb', line 20 def success(content = nil, metadata: {}) new(content: content, status: :success, metadata: ) end |
Instance Method Details
#aborted? ⇒ Boolean
Returns true if status is :aborted.
76 |
# File 'lib/ask/result.rb', line 76 def aborted? = @status == :aborted |
#blocked? ⇒ Boolean
Returns true if status is :blocked.
79 |
# File 'lib/ask/result.rb', line 79 def blocked? = @status == :blocked |
#error? ⇒ Boolean
Returns true if status is :error.
73 |
# File 'lib/ask/result.rb', line 73 def error? = @status == :error |
#inspect ⇒ String
Returns human-readable representation.
97 98 99 |
# File 'lib/ask/result.rb', line 97 def inspect "#<Ask::Result status=#{@status.inspect} content=#{@content.inspect}>" end |
#success? ⇒ Boolean
Returns true if status is :success.
70 |
# File 'lib/ask/result.rb', line 70 def success? = @status == :success |
#to_h ⇒ Hash
Returns serialized representation.
87 88 89 90 91 92 93 94 |
# File 'lib/ask/result.rb', line 87 def to_h { content: @content, status: @status, error: @error, metadata: @metadata }.compact end |
#to_s ⇒ String
Returns the content as a string.
82 83 84 |
# File 'lib/ask/result.rb', line 82 def to_s @content.to_s end |