Class: Decoding::Result Abstract

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

Overview

This class is abstract.

A result represent the outcome of some computation that can succeed or fail. The results are represented with two subclasses of Result: Ok and Err. Each hold a single result value.

The use of a result is the common interface provided to callers for transforming or chaining result values.

Direct Known Subclasses

Err, Ok

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(value) ⇒ Result

Returns a new instance of Result.



49
50
51
52
53
# File 'lib/decoding/result.rb', line 49

def initialize(value)
  @value = value
  @hash = [self.class, value].hash
  freeze
end

Instance Attribute Details

#hashObject (readonly)



47
48
49
# File 'lib/decoding/result.rb', line 47

def hash
  @hash
end

Class Method Details

.all(results) ⇒ Result<a>

Collapse array of result values into a single result, or return the first Err value.

Examples:

all(Ok(1), Ok(2)) # => Ok([1, 2])
all(Ok(1), Err("error")) # => Err("error")

Parameters:

Returns:



33
34
35
36
37
# File 'lib/decoding/result.rb', line 33

def self.all(results)
  results.reduce(ok([])) do |acc, el|
    acc.and(el.to_result) { [*_1, _2] }
  end
end

.err(value) ⇒ Decoding::Err<a>

Construct a new Err value with the given value.

Parameters:

  • value (a)

Returns:



23
# File 'lib/decoding/result.rb', line 23

def self.err(value) = Err.new(value)

.ok(value) ⇒ Decoding::Ok<a>

Construct a new Ok value with the given value.

Parameters:

  • value (a)

Returns:



17
# File 'lib/decoding/result.rb', line 17

def self.ok(value) = Ok.new(value)

Instance Method Details

#and(other) {|left, right| ... } ⇒ Decoding::Result<c>

Combine two Result values if they are both Ok using the given block, or return the first Err value.

Parameters:

Yield Parameters:

  • left (Object)
  • right (Object)

Yield Returns:

  • (c)

Returns:



125
# File 'lib/decoding/result.rb', line 125

def and(_) = self

#and_then {|value| ... } ⇒ Decoding::Result<a>

Transform a result using a block that will also return a result.

Yield Parameters:

  • value (Object)

Yield Returns:

Returns:



132
# File 'lib/decoding/result.rb', line 132

def and_then = self

#deconstructObject



55
56
57
# File 'lib/decoding/result.rb', line 55

def deconstruct
  [value]
end

#eql?(other) ⇒ Boolean Also known as: ==

Returns:

  • (Boolean)


59
60
61
# File 'lib/decoding/result.rb', line 59

def eql?(other)
  other.is_a?(self.class) && value == other.value
end

#err?Boolean

Whether this value is an Err value.

Returns:

  • (Boolean)


76
# File 'lib/decoding/result.rb', line 76

def err? = false

#inspectObject



64
65
66
# File 'lib/decoding/result.rb', line 64

def inspect
  "#<#{self.class} #{value.inspect}>"
end

#map {|value| ... } ⇒ Decoding::Result<b>

Create a new Result value for the result of the block applied to this result's value. Err values are returned as-is.

Examples:

Result.ok(123).map { |i| i * 2 } # => Ok(246)
Result.err("error").map { |i| i * 2 } # => Err("error")

Yield Parameters:

  • value (a)

Yield Returns:

  • (b)

Returns:



103
# File 'lib/decoding/result.rb', line 103

def map = self

#map_err {|value| ... } ⇒ Decoding::Result<b>

Create a new Result value for the result of the block applied to this result's value. Ok values are returned as-is.

Examples:

Result.ok(123).map { |s| s.upcase } # => Ok(123)
Result.err("error").map { |s| s.upcase } # => Err("ERROR")

Yield Parameters:

  • value (a)

Yield Returns:

  • (b)

Returns:



114
# File 'lib/decoding/result.rb', line 114

def map_err = self

#ok?Boolean

Whether this value is an Ok value.

Returns:

  • (Boolean)


71
# File 'lib/decoding/result.rb', line 71

def ok? = false

#to_resultObject



134
# File 'lib/decoding/result.rb', line 134

def to_result = self

#unwrap(default_value) ⇒ Object

Extract the value out of a Result value. In case of an Ok, this returns the result's value. In case of an Err, the given default_value is returned.

Parameters:

  • default_value (Object)

Returns:

  • (Object)


84
# File 'lib/decoding/result.rb', line 84

def unwrap(default_value) = default_value

#unwrap_err(default_value) ⇒ Object

Extract the error value out of a Result value. In case of an Err, this returns the result's value. In case of an Ok, the given default_value is returned.

Parameters:

  • default_value (Object)

Returns:

  • (Object)


92
# File 'lib/decoding/result.rb', line 92

def unwrap_err(default_value) = default_value