Sha256: 9f5100dfe4fa6564269eb75e6ca2329f0672445867b1703a3f5d6fe90a204b7d

Contents?: true

Size: 952 Bytes

Versions: 1

Compression:

Stored size: 952 Bytes

Contents

require_relative "fulfills_stubbing/finds_satisfaction"
require_relative "fulfills_stubbing/describes_unsatisfied_stubbing"

module Mocktail
  class FulfillsStubbing
    extend T::Sig

    def initialize
      @finds_satisfaction = FindsSatisfaction.new
      @describes_unsatisfied_stubbing = DescribesUnsatisfiedStubbing.new
    end

    def fulfill(dry_call)
      if (stubbing = satisfaction(dry_call))
        stubbing.satisfied!
        stubbing.effect&.call(dry_call)
      else
        store_unsatisfying_call!(dry_call)
        nil
      end
    end

    def satisfaction(dry_call)
      return if Mocktail.cabinet.demonstration_in_progress?

      @finds_satisfaction.find(dry_call)
    end

    private

    def store_unsatisfying_call!(dry_call)
      return if Mocktail.cabinet.demonstration_in_progress?

      Mocktail.cabinet.store_unsatisfying_call(
        @describes_unsatisfied_stubbing.describe(dry_call)
      )
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mocktail-2.0.0 lib/mocktail/handles_dry_call/fulfills_stubbing.rb