Class: Literal::Success
Defined Under Namespace
Classes: Generic
Instance Attribute Summary collapse
-
#failure_type ⇒ Object
readonly
Returns the value of attribute failure_type.
-
#success_type ⇒ Object
readonly
Returns the value of attribute success_type.
Instance Method Summary collapse
- #deconstruct ⇒ Object
- #deconstruct_keys(keys) ⇒ Object
- #error! ⇒ Object
- #failure? ⇒ Boolean
-
#initialize(value, success_type:, failure_type:) ⇒ Success
constructor
A new instance of Success.
- #map(type) ⇒ Object
- #success? ⇒ Boolean
- #then ⇒ Object
- #value! ⇒ Object
- #value_or ⇒ Object
Methods inherited from Result
Constructor Details
#initialize(value, success_type:, failure_type:) ⇒ Success
Returns a new instance of Success.
25 26 27 28 29 30 31 32 33 34 |
# File 'lib/literal/success.rb', line 25 def initialize(value, success_type:, failure_type:) @value = value @success_type = success_type @failure_type = failure_type Literal.check(@value, success_type) freeze end |
Instance Attribute Details
#failure_type ⇒ Object (readonly)
Returns the value of attribute failure_type.
36 37 38 |
# File 'lib/literal/success.rb', line 36 def failure_type @failure_type end |
#success_type ⇒ Object (readonly)
Returns the value of attribute success_type.
36 37 38 |
# File 'lib/literal/success.rb', line 36 def success_type @success_type end |
Instance Method Details
#deconstruct ⇒ Object
50 51 52 |
# File 'lib/literal/success.rb', line 50 def deconstruct [@value] end |
#deconstruct_keys(keys) ⇒ Object
54 55 56 57 58 59 60 |
# File 'lib/literal/success.rb', line 54 def deconstruct_keys(keys) if @value.respond_to?(:deconstruct_keys) @value.deconstruct_keys(keys) else {} end end |
#error! ⇒ Object
62 63 64 |
# File 'lib/literal/success.rb', line 62 def error! raise Literal::ArgumentError.new("Success has no error") end |
#failure? ⇒ Boolean
42 43 44 |
# File 'lib/literal/success.rb', line 42 def failure? false end |
#map(type) ⇒ Object
66 67 68 69 70 71 72 73 74 75 |
# File 'lib/literal/success.rb', line 66 def map(type) raise ArgumentError unless block_given? result = yield(@value) Literal::Success.new( result, success_type: type, failure_type: @failure_type ) end |
#success? ⇒ Boolean
38 39 40 |
# File 'lib/literal/success.rb', line 38 def success? true end |
#then ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/literal/success.rb', line 77 def then raise ArgumentError unless block_given? result = yield(@value) case result when Literal::Failure Literal::Failure.new( result.error!, success_type: result.success_type, failure_type: Literal::Types::_Union(@failure_type, result.failure_type) ) when Literal::Success Literal::Success.new( result.value!, success_type: result.success_type, failure_type: Literal::Types::_Union(@failure_type, result.failure_type) ) else raise Literal::ArgumentError.new("Expected block to return a Literal::Result, got #{result.class.inspect}") end end |
#value! ⇒ Object
46 47 48 |
# File 'lib/literal/success.rb', line 46 def value! @value end |
#value_or ⇒ Object
99 100 101 102 |
# File 'lib/literal/success.rb', line 99 def value_or raise ArgumentError unless block_given? @value end |