class RSpec::Support::MethodSignatureVerifier

Figures out wheter a given method can accept various arguments. Surprisingly non-trivial.

@private

Attributes

kw_args[R]
non_kw_args[R]

Public Class Methods

new(signature, args) click to toggle source
# File lib/rspec/support/method_signature_verifier.rb, line 151
def initialize(signature, args)
  @signature = signature
  @non_kw_args, @kw_args = split_args(*args)
end

Public Instance Methods

error_message() click to toggle source
# File lib/rspec/support/method_signature_verifier.rb, line 162
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.length
    ]
  end
end
valid?() click to toggle source
# File lib/rspec/support/method_signature_verifier.rb, line 156
def valid?
   missing_kw_args.empty? &&
    invalid_kw_args.empty? &&
    valid_non_kw_args?
end

Private Instance Methods

invalid_kw_args() click to toggle source
# File lib/rspec/support/method_signature_verifier.rb, line 190
def invalid_kw_args
  @signature.invalid_kw_args_from(kw_args)
end
missing_kw_args() click to toggle source
# File lib/rspec/support/method_signature_verifier.rb, line 186
def missing_kw_args
  @signature.missing_kw_args_from(kw_args)
end
split_args(*args) click to toggle source
# File lib/rspec/support/method_signature_verifier.rb, line 194
def split_args(*args)
  kw_args = if @signature.has_kw_args_in?(args)
    args.pop.keys
  else
    []
  end

  [args, kw_args]
end
valid_non_kw_args?() click to toggle source
# File lib/rspec/support/method_signature_verifier.rb, line 181
def valid_non_kw_args?
  actual = non_kw_args.length
  @signature.min_non_kw_args <= actual && actual <= @signature.max_non_kw_args
end