class RSpec::Support::StrictSignatureVerifier

Abstract base class for signature verifiers.

@api private

Attributes

Public Class Methods

# File rspec-support/lib/rspec/support/method_signature_verifier.rb, line 283
def initialize(signature, args=[])
  @signature = signature
  @non_kw_args, @kw_args = split_args(*args)
  @min_non_kw_args = @max_non_kw_args = @non_kw_args
  @arbitrary_kw_args = @unlimited_args = false
end

Public Instance Methods

# File rspec-support/lib/rspec/support/method_signature_verifier.rb, line 326
def error_message
  if missing_kw_args.any?
    "Missing required keyword arguments: %s" % [
      missing_kw_args.join(", ")
    ]
  elsif invalid_kw_args.any?
    "Invalid keyword arguments provided: %s" % [
      invalid_kw_args.join(", ")
    ]
  elsif !valid_non_kw_args?
    "Wrong number of arguments. Expected %s, got %s." % [
      @signature.non_kw_args_arity_description,
      non_kw_args
    ]
  end
end
# File rspec-support/lib/rspec/support/method_signature_verifier.rb, line 318
def valid?
  missing_kw_args.empty? &&
    invalid_kw_args.empty? &&
    valid_non_kw_args? &&
    arbitrary_kw_args? &&
    unlimited_args?
end
# File rspec-support/lib/rspec/support/method_signature_verifier.rb, line 290
def with_expectation(expectation) # rubocop:disable Metrics/MethodLength
  return self unless MethodSignatureExpectation === expectation

  if expectation.empty?
    @min_non_kw_args = @max_non_kw_args = @non_kw_args = nil
    @kw_args     = []
  else
    @min_non_kw_args = @non_kw_args = expectation.min_count || 0
    @max_non_kw_args                = expectation.max_count || @min_non_kw_args

    if RubyFeatures.optional_and_splat_args_supported?
      @unlimited_args = expectation.expect_unlimited_arguments
    else
      @unlimited_args = false
    end

    if RubyFeatures.kw_args_supported?
      @kw_args           = expectation.keywords
      @arbitrary_kw_args = expectation.expect_arbitrary_keywords
    else
      @kw_args           = []
      @arbitrary_kw_args = false
    end
  end

  self
end