lib/micro/case/result/wrapper.rb
# frozen_string_literal: true
module Micro
class Case
class Result
class Wrapper
attr_reader :output
def initialize(result)
@result = result
@output = ::Kind::Undefined
@__is_unknown = true
end
def failure(type = nil)
return if @result.success? || !undefined_output?
set_output(yield(@result)) if result_type?(type)
end
def success(type = nil)
return if @result.failure? || !undefined_output?
set_output(yield(@result)) if result_type?(type)
end
def unknown
@output = yield(@result) if @__is_unknown && undefined_output?
end
private
def set_output(value)
@__is_unknown = false
@output = value
end
def undefined_output?
::Kind::Undefined == @output
end
def result_type?(type)
type.nil? || @result.type == type
end
end
end
end
end