Class: Result
- Inherits:
-
Object
- Object
- Result
- Defined in:
- lib/wolf_core/utils/result.rb
Instance Attribute Summary collapse
-
#data ⇒ Object
Returns the value of attribute data.
-
#error ⇒ Object
Returns the value of attribute error.
Class Method Summary collapse
Instance Method Summary collapse
- #data_or_raise_error ⇒ Object
- #failure? ⇒ Boolean
- #fold(success: nil, failure: nil) ⇒ Object
-
#initialize(success:, data: nil, error: nil) ⇒ Result
constructor
A new instance of Result.
- #raise_error ⇒ Object
- #slice(*keys) ⇒ Object
- #success? ⇒ Boolean
- #to_h ⇒ Object
Constructor Details
#initialize(success:, data: nil, error: nil) ⇒ Result
Returns a new instance of Result.
4 5 6 7 8 |
# File 'lib/wolf_core/utils/result.rb', line 4 def initialize(success:, data: nil, error: nil) @success = success @data = data @error = error end |
Instance Attribute Details
#data ⇒ Object
Returns the value of attribute data.
2 3 4 |
# File 'lib/wolf_core/utils/result.rb', line 2 def data @data end |
#error ⇒ Object
Returns the value of attribute error.
2 3 4 |
# File 'lib/wolf_core/utils/result.rb', line 2 def error @error end |
Class Method Details
.failure(error: {}) ⇒ Object
14 15 16 |
# File 'lib/wolf_core/utils/result.rb', line 14 def self.failure(error: {}) Result.new(success: false, error: OpenStruct.new(error)) end |
.success(data: {}) ⇒ Object
10 11 12 |
# File 'lib/wolf_core/utils/result.rb', line 10 def self.success(data: {}) Result.new(success: true, data: OpenStruct.new(data)) end |
.try ⇒ Object
18 19 20 21 22 23 24 25 26 |
# File 'lib/wolf_core/utils/result.rb', line 18 def self.try try_result = yield unless try_result.is_a?(Result) raise StandardError, "Try result must be a Result object, got: #{try_result.class}" end try_result rescue StandardError => e Result.failure(error: { message: e., error_class: e.class, backtrace: e.backtrace }) end |
Instance Method Details
#data_or_raise_error ⇒ Object
79 80 81 |
# File 'lib/wolf_core/utils/result.rb', line 79 def data_or_raise_error raise_error.data end |
#failure? ⇒ Boolean
32 33 34 |
# File 'lib/wolf_core/utils/result.rb', line 32 def failure? !@success end |
#fold(success: nil, failure: nil) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/wolf_core/utils/result.rb', line 54 def fold(success: nil, failure: nil) fold_result = if success? if success.respond_to?(:call) success.call(@data) else if block_given? yield(@data) else self end end else if failure.respond_to?(:call) failure.call(@error) else self end end unless fold_result.is_a?(Result) raise StandardError, "Fold result must be a Result object, got: #{fold_result.class}" end fold_result end |
#raise_error ⇒ Object
83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/wolf_core/utils/result.rb', line 83 def raise_error return self if success? err_class = error.error_class || StandardError e = begin err_class.new(error.) rescue StandardError.new(error.) end e.set_backtrace(error.backtrace) if error.backtrace raise e end |
#slice(*keys) ⇒ Object
44 45 46 47 48 49 50 51 52 |
# File 'lib/wolf_core/utils/result.rb', line 44 def slice(*keys) if success? sliced_data = @data.to_h.slice(*keys) Result.success(data: sliced_data) else sliced_error = @error.to_h.slice(*keys) Result.failure(error: sliced_error) end end |
#success? ⇒ Boolean
28 29 30 |
# File 'lib/wolf_core/utils/result.rb', line 28 def success? @success end |
#to_h ⇒ Object
36 37 38 39 40 41 42 |
# File 'lib/wolf_core/utils/result.rb', line 36 def to_h { success: @success, data: @data, error: @error, } end |