Figures out wheter a given method can accept various arguments. Surprisingly non-trivial.
@private
# 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
# 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
# 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
# File lib/rspec/support/method_signature_verifier.rb, line 190 def invalid_kw_args @signature.invalid_kw_args_from(kw_args) end
# File lib/rspec/support/method_signature_verifier.rb, line 186 def missing_kw_args @signature.missing_kw_args_from(kw_args) end
# 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
# 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