diff --git a/lib/rspec/support/method_signature_verifier.rb b/lib/rspec/support/method_signature_verifier.rb index 990ba7c7..af70556c 100644 --- a/lib/rspec/support/method_signature_verifier.rb +++ b/lib/rspec/support/method_signature_verifier.rb @@ -305,7 +305,7 @@ class MethodSignatureVerifier def initialize(signature, args=[]) @signature = signature - @non_kw_args, @kw_args = split_args(*args) + @non_kw_args, @kw_args = split_args(args.clone) @min_non_kw_args = @max_non_kw_args = @non_kw_args @arbitrary_kw_args = @unlimited_args = false end @@ -385,7 +385,7 @@ def unlimited_args? !@unlimited_args || @signature.unlimited_args? end - def split_args(*args) + def split_args(args) kw_args = if @signature.has_kw_args_in?(args) && !RubyFeatures.kw_arg_separation? last = args.pop non_kw_args = last.reject { |k, _| k.is_a?(Symbol) } @@ -418,13 +418,13 @@ def split_args(*args) class LooseSignatureVerifier < MethodSignatureVerifier private - def split_args(*args) + def split_args(args) if RSpec::Support.is_a_matcher?(args.last) && @signature.could_contain_kw_args?(args) args.pop @signature = SignatureWithKeywordArgumentsMatcher.new(@signature) end - super(*args) + super(args) end # If a matcher is used in a signature in place of keyword arguments, all