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