Sha256: 4b072ad816ffd8293923aae835f7461bf375f73d8b6aa5d7c5d818c79200aa6c

Contents?: true

Size: 1022 Bytes

Versions: 4

Compression:

Stored size: 1022 Bytes

Contents

# frozen_string_literal: true

require_relative File.join("expectation_target", "block")
require_relative File.join("expectation_target", "value")

module RSpec
  module Clone
    # Wraps the target of an expectation.
    #
    # @api private
    module ExpectationTarget
      # @param undefined_value A sentinel value to be able to tell when the user
      #   did not pass an argument. We can't use `nil` for that because `nil` is a
      #   valid value to pass.
      # @param value [#object_id, nil] An actual value.
      # @param block [#call, nil] A code to evaluate.
      #
      # @return [Block, Value] The wrapped target of an expectation.
      def self.call(undefined_value, value, block)
        if undefined_value.equal?(value)
          raise ::ArgumentError, "Pass either an argument or a block" unless block

          Block.new(block)
        else
          raise ::ArgumentError, "Can't pass both an argument and a block" if block

          Value.new(value)
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
r_spec-clone-1.2.0 lib/r_spec/clone/expectation_target.rb
r_spec-clone-1.1.0 lib/r_spec/clone/expectation_target.rb
r_spec-clone-1.0.2 lib/r_spec/clone/expectation_target.rb
r_spec-clone-1.0.0.rc1 lib/r_spec/clone/expectation_target.rb