@api private Provides the implementation for `yield_successive_args`. Not intended to be instantiated directly.
# File lib/rspec/matchers/built_in/yield.rb, line 359 def initialize(*args) @expected = args end
@private
# File lib/rspec/matchers/built_in/yield.rb, line 399 def description "yield successive args(#{expected_arg_description})" end
# File lib/rspec/matchers/built_in/yield.rb, line 382 def does_not_match?(block) !matches?(block) && @probe.has_block? end
@private
# File lib/rspec/matchers/built_in/yield.rb, line 387 def failure_message 'expected given block to yield successively with arguments, ' "but #{positive_failure_reason}" end
@private
# File lib/rspec/matchers/built_in/yield.rb, line 393 def failure_message_when_negated 'expected given block not to yield successively with arguments, ' "but #{negative_failure_reason}" end
@private
# File lib/rspec/matchers/built_in/yield.rb, line 364 def matches?(block) @actual_formatted = [] @actual = [] args_matched_when_yielded = true yield_count = 0 @probe = YieldProbe.probe(block) do |*arg_array| arg_or_args = arg_array.size == 1 ? arg_array.first : arg_array @actual_formatted << RSpec::Support::ObjectFormatter.format(arg_or_args) @actual << arg_or_args args_matched_when_yielded &&= values_match?(@expected[yield_count], arg_or_args) yield_count += 1 end return false unless @probe.has_block? args_matched_when_yielded && yield_count == @expected.length end
@private
# File lib/rspec/matchers/built_in/yield.rb, line 404 def supports_block_expectations? true end