Class: Fractor::WorkResult
- Inherits:
-
Object
- Object
- Fractor::WorkResult
- Defined in:
- lib/fractor/work_result.rb
Overview
Represents the result of processing a Work item. Can hold either a successful result or an error with rich metadata.
Constant Summary collapse
- SEVERITY_CRITICAL =
Error severity levels
:critical- SEVERITY_ERROR =
System-breaking errors
:error- SEVERITY_WARNING =
Standard errors
:warning- SEVERITY_INFO =
Non-fatal issues
:info- CATEGORY_VALIDATION =
Error categories
:validation- CATEGORY_TIMEOUT =
Input validation errors
:timeout- CATEGORY_NETWORK =
Timeout errors
:network- CATEGORY_RESOURCE =
Network-related errors
:resource- CATEGORY_BUSINESS =
Resource exhaustion
:business- CATEGORY_SYSTEM =
Business logic errors
:system- CATEGORY_UNKNOWN =
System errors
:unknown
Instance Attribute Summary collapse
-
#error ⇒ Object
readonly
Unknown/uncategorized.
-
#error_category ⇒ Object
readonly
Unknown/uncategorized.
-
#error_code ⇒ Object
readonly
Unknown/uncategorized.
-
#error_context ⇒ Object
readonly
Unknown/uncategorized.
-
#error_severity ⇒ Object
readonly
Unknown/uncategorized.
-
#result ⇒ Object
readonly
Unknown/uncategorized.
-
#stack_trace ⇒ Object
readonly
Unknown/uncategorized.
-
#suggestion ⇒ Object
readonly
Unknown/uncategorized.
-
#work ⇒ Object
readonly
Unknown/uncategorized.
Instance Method Summary collapse
-
#critical? ⇒ Boolean
Check if error is critical.
-
#error_info ⇒ Object
Get full error information as hash.
- #failure? ⇒ Boolean
-
#initialize(result: nil, error: nil, work: nil, error_code: nil, error_context: nil, error_category: nil, error_severity: nil, suggestion: nil, stack_trace: nil) ⇒ WorkResult
constructor
A new instance of WorkResult.
- #inspect ⇒ Object
-
#retriable? ⇒ Boolean
Check if error is retriable based on category.
- #success? ⇒ Boolean
- #to_s ⇒ Object
Constructor Details
#initialize(result: nil, error: nil, work: nil, error_code: nil, error_context: nil, error_category: nil, error_severity: nil, suggestion: nil, stack_trace: nil) ⇒ WorkResult
Returns a new instance of WorkResult.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/fractor/work_result.rb', line 25 def initialize( result: nil, error: nil, work: nil, error_code: nil, error_context: nil, error_category: nil, error_severity: nil, suggestion: nil, stack_trace: nil ) @result = result @error = error @work = work @error_code = error_code @error_context = error_context || {} @error_category = error_category || infer_category(error) @error_severity = error_severity || infer_severity(error) @suggestion = suggestion || infer_suggestion(error) @stack_trace = stack_trace || capture_stack_trace(error) end |
Instance Attribute Details
#error ⇒ Object (readonly)
Unknown/uncategorized
22 23 24 |
# File 'lib/fractor/work_result.rb', line 22 def error @error end |
#error_category ⇒ Object (readonly)
Unknown/uncategorized
22 23 24 |
# File 'lib/fractor/work_result.rb', line 22 def error_category @error_category end |
#error_code ⇒ Object (readonly)
Unknown/uncategorized
22 23 24 |
# File 'lib/fractor/work_result.rb', line 22 def error_code @error_code end |
#error_context ⇒ Object (readonly)
Unknown/uncategorized
22 23 24 |
# File 'lib/fractor/work_result.rb', line 22 def error_context @error_context end |
#error_severity ⇒ Object (readonly)
Unknown/uncategorized
22 23 24 |
# File 'lib/fractor/work_result.rb', line 22 def error_severity @error_severity end |
#result ⇒ Object (readonly)
Unknown/uncategorized
22 23 24 |
# File 'lib/fractor/work_result.rb', line 22 def result @result end |
#stack_trace ⇒ Object (readonly)
Unknown/uncategorized
22 23 24 |
# File 'lib/fractor/work_result.rb', line 22 def stack_trace @stack_trace end |
#suggestion ⇒ Object (readonly)
Unknown/uncategorized
22 23 24 |
# File 'lib/fractor/work_result.rb', line 22 def suggestion @suggestion end |
#work ⇒ Object (readonly)
Unknown/uncategorized
22 23 24 |
# File 'lib/fractor/work_result.rb', line 22 def work @work end |
Instance Method Details
#critical? ⇒ Boolean
Check if error is critical
56 57 58 |
# File 'lib/fractor/work_result.rb', line 56 def critical? @error_severity == SEVERITY_CRITICAL end |
#error_info ⇒ Object
Get full error information as hash
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/fractor/work_result.rb', line 73 def error_info return nil if success? { error: @error, error_class: @error&.class&.name, error_message: @error&., error_code: @error_code, error_category: @error_category, error_severity: @error_severity, error_context: @error_context, suggestion: @suggestion, stack_trace: @stack_trace, } end |
#failure? ⇒ Boolean
51 52 53 |
# File 'lib/fractor/work_result.rb', line 51 def failure? !success? end |
#inspect ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/fractor/work_result.rb', line 97 def inspect if success? { result: @result, work: @work&.to_s, } else { error: @error, error_code: @error_code, error_category: @error_category, error_severity: @error_severity, error_context: @error_context, work: @work&.to_s, } end end |
#retriable? ⇒ Boolean
Check if error is retriable based on category
61 62 63 64 65 66 67 68 69 70 |
# File 'lib/fractor/work_result.rb', line 61 def retriable? return false if success? retriable_categories = [ CATEGORY_TIMEOUT, CATEGORY_NETWORK, CATEGORY_RESOURCE, ] retriable_categories.include?(@error_category) end |
#success? ⇒ Boolean
47 48 49 |
# File 'lib/fractor/work_result.rb', line 47 def success? !@error end |
#to_s ⇒ Object
89 90 91 92 93 94 95 |
# File 'lib/fractor/work_result.rb', line 89 def to_s if success? "Result: #{@result}" else "Error: #{@error}, Code: #{@error_code}, Category: #{@error_category}, Severity: #{@error_severity}" end end |