class Lab42::Result
Constants
- VERSION
Attributes
status[R]
value[R]
Private Class Methods
error(message, error: RuntimeError)
click to toggle source
# File lib/lab42/result.rb, line 32 def error(message, error: RuntimeError) raise ArgumentError, "#{error.inspect} must be an Exception" unless Exception.class === error o = allocate o.instance_exec do @status = error @value = message end o.freeze end
from(error_message, &blk)
click to toggle source
# File lib/lab42/result.rb, line 42 def from(error_message, &blk) ok(blk.()) rescue Exception => e error(error_message, error: e.class) end
new(*,**)
click to toggle source
# File lib/lab42/result.rb, line 28 def new(*,**) raise NoMethodError, "only use the constructors `.ok` and `.error`" end
ok(value=nil)
click to toggle source
# File lib/lab42/result.rb, line 48 def ok(value=nil) o = allocate o.instance_exec do @status = :ok @value = value end o.freeze end
Private Instance Methods
deconstruct()
click to toggle source
# File lib/lab42/result.rb, line 5 def deconstruct [status, value].freeze end
if_error(&blk)
click to toggle source
# File lib/lab42/result.rb, line 9 def if_error &blk blk.(status, value) unless ok? end
if_ok(&blk)
click to toggle source
# File lib/lab42/result.rb, line 13 def if_ok &blk blk.(value) if ok? end
ok?()
click to toggle source
# File lib/lab42/result.rb, line 17 def ok? status == :ok end
raise!(alternative_exception=nil, &blk)
click to toggle source
# File lib/lab42/result.rb, line 21 def raise!(alternative_exception=nil, &blk) return value if ok? message = blk ? blk.(value) : value raise((alternative_exception||status), message) end