Sha256: 5c6fbdfc6c99a3b04f98e46c7b629e9d5ebc65b7f6f7f269eb6480991d8baa49

Contents?: true

Size: 1.05 KB

Versions: 1

Compression:

Stored size: 1.05 KB

Contents

# typed: strict
# frozen_string_literal: true

require 'clean_architecture/entities/failure_details'
require 'dry-matcher'
require 'dry/monads/all'

module CleanArchitecture
  module Matchers
    class UseCaseResult
      extend T::Sig

      sig { params(result: Dry::Monads::Result[Entities::FailureDetails, T.untyped], block: T.untyped).returns(T.untyped) }
      def self.call(result, &block)
        new.matcher.call(result, &block)
      end

      sig {returns(Dry::Matcher)}
      def matcher
        Dry::Matcher.new(success: success_case, failure: failure_case)
      end

      private

      sig { returns(Dry::Matcher::Case) }
      def success_case
        Dry::Matcher::Case.new(
          match: ->(value) { value.is_a?(Dry::Monads::Success) },
          resolve: ->(value) { value.value! }
        )
      end

      sig { returns(Dry::Matcher::Case) }
      def failure_case
        Dry::Matcher::Case.new(
          match: ->(value) { value.is_a?(Dry::Monads::Failure) },
          resolve: ->(value) { value.failure }
        )
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
clean-architecture-6.1.0 lib/clean_architecture/matchers/use_case_result.rb