Class: GitHub::Result
- Inherits:
-
Object
- Object
- GitHub::Result
- Defined in:
- lib/github/result.rb
Class Method Summary collapse
-
.error(e) ⇒ Object
Create a GitHub::Result with only the error condition set.
Instance Method Summary collapse
-
#error ⇒ Object
If the result represents a value, returns nil.
-
#initialize ⇒ Result
constructor
Invokes the supplied block and wraps the return value in a GitHub::Result object.
-
#map ⇒ Object
If the result represents a value, invokes the supplied block with that value and wraps the block’s return value in a GitHub::Result.
-
#ok? ⇒ Boolean
Returns true if the result represents a value, false if an error.
-
#rescue ⇒ Object
If the result represents an error, invokes the supplied block with that error.
-
#then ⇒ Object
If the result represents a value, invokes the supplied block with that value.
- #to_s ⇒ Object (also: #inspect)
-
#value ⇒ Object
If the result represents a value, returns that value.
-
#value! ⇒ Object
If the result represents a value, returns that value.
Constructor Details
#initialize ⇒ Result
16 17 18 19 20 21 22 23 |
# File 'lib/github/result.rb', line 16 def initialize begin @value = yield if block_given? @error = nil rescue => e @error = e end end |
Class Method Details
Instance Method Details
#error ⇒ Object
If the result represents a value, returns nil.
If the result represents an error, returns that error.
result = do_something()
# => #<GitHub::Result value: "foo">
result.error
# => nil
result = do_something_that_fails()
# => #<GitHub::Result error: ...>
result.error
# => ...
214 215 216 |
# File 'lib/github/result.rb', line 214 def error @error end |
#map ⇒ Object
If the result represents a value, invokes the supplied block with that value and wraps the block’s return value in a GitHub::Result.
If the result represents an error, returns self.
The block should not return a GitHub::Result object (unless you truly intend to create a GitHub::Result<GitHub::Result<T>>). Use #then if it does.
Example:
result = do_something()
# => #<GitHub::Result value: 123>
result.map { |val| val * 2 }
# => #<GitHub::Result value: 246>
do_something_that_fails().map { |val|
# never invoked
}
# => #<GitHub::Result error: ...>
113 114 115 116 117 118 119 |
# File 'lib/github/result.rb', line 113 def map if ok? Result.new { yield(@value) } else self end end |
#ok? ⇒ Boolean
Returns true if the result represents a value, false if an error.
Example:
result = do_something()
# => #<GitHub::Result value: "foo">
result.ok?
# => true
result = do_something_that_fails()
# => #<GitHub::Result error: ...>
result.ok?
# => false
194 195 196 |
# File 'lib/github/result.rb', line 194 def ok? !@error end |
#rescue ⇒ Object
If the result represents an error, invokes the supplied block with that error.
If the result represents a value, returns self.
The block must also return a GitHub::Result object. Use #map otherwise.
Example:
result = do_something().rescue { |val|
# never invoked
}
# => #<GitHub::Result value: ...>
do_something_that_fails().rescue { |val|
# handle_error(val)
}
# => #<GitHub::Result error: ...>
84 85 86 87 88 89 |
# File 'lib/github/result.rb', line 84 def rescue return self if ok? result = yield(@error) raise TypeError, "block invoked in GitHub::Result#rescue did not return GitHub::Result" unless result.is_a?(Result) result end |
#then ⇒ Object
If the result represents a value, invokes the supplied block with that value.
If the result represents an error, returns self.
The block must also return a GitHub::Result object. Use #map otherwise.
Example:
result = do_something().then { |val|
do_other_thing(val)
}
# => #<GitHub::Result value: ...>
do_something_that_fails().then { |val|
# never invoked
}
# => #<GitHub::Result error: ...>
55 56 57 58 59 60 61 62 63 |
# File 'lib/github/result.rb', line 55 def then if ok? result = yield(@value) raise TypeError, "block invoked in GitHub::Result#then did not return GitHub::Result" unless result.is_a?(Result) result else self end end |
#to_s ⇒ Object Also known as: inspect
25 26 27 28 29 30 31 |
# File 'lib/github/result.rb', line 25 def to_s if ok? "#<GitHub::Result:0x%x value: %s>" % [object_id, @value.inspect] else "#<GitHub::Result:0x%x error: %s>" % [object_id, @error.inspect] end end |
#value ⇒ Object
If the result represents a value, returns that value.
If the result represents an error, invokes the supplied block with the exception object.
Example:
result = do_something()
# => #<GitHub::Result value: "foo">
result.value { "nope" }
# => "foo"
result = do_something_that_fails()
# => #<GitHub::Result error: ...>
result.value { "nope" }
# => #<GitHub::Result value: "nope">
140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/github/result.rb', line 140 def value unless block_given? raise ArgumentError, "must provide a block to GitHub::Result#value to be invoked in case of error" end if ok? @value else yield(@error) end end |
#value! ⇒ Object
If the result represents a value, returns that value.
If the result represents an error, raises that error.
Example:
result = do_something()
# => #<GitHub::Result value: "foo">
result.value!
# => "foo"
result = do_something_that_fails()
# => #<GitHub::Result error: ...>
result.value!
# !! raises exception
170 171 172 173 174 175 176 |
# File 'lib/github/result.rb', line 170 def value! if ok? @value else raise @error end end |