Sha256: 22b5cde7e2f14a430314be4e28949b0f4a91897ee84826c14d7bd57740b2526c
Contents?: true
Size: 1.17 KB
Versions: 1
Compression:
Stored size: 1.17 KB
Contents
# frozen_string_literal: true class Solid::Result class Handler require_relative 'handler/allowed_types' UNDEFINED = ::Object.new def initialize(result, type_checker:) @allowed_types = AllowedTypes.new(type_checker) @outcome = UNDEFINED @result = result end def [](*types, &block) raise Error::MissingTypeArgument if types.empty? self.outcome = block if allowed_types.allow?(types) end def success(*types, &block) self.outcome = block if allowed_types.allow_success?(types) && result.success? end def failure(*types, &block) self.outcome = block if allowed_types.allow_failure?(types) && result.failure? end def unknown(&block) self.outcome = block unless outcome? end alias type [] private attr_reader :result, :allowed_types def outcome? @outcome != UNDEFINED end def outcome=(block) @outcome = block.call(result.value, result.type) unless outcome? end def outcome allowed_types.all_checked? or raise Error::UnhandledTypes.build(types: allowed_types.unchecked) @outcome if outcome? end end private_constant :Handler end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
solid-result-2.0.0 | lib/solid/result/handler.rb |