@api private Provides the implementation for `all`. Not intended to be instantiated directly.
@private
@private
# File lib/rspec/matchers/built_in/all.rb, line 12 def initialize(matcher) @matcher = matcher @failed_objects = {} end
@api private @return [String]
# File lib/rspec/matchers/built_in/all.rb, line 34 def description described_items = surface_descriptions_in(matcher) improve_hash_formatting "all#{to_sentence(described_items)}" end
@private
# File lib/rspec/matchers/built_in/all.rb, line 18 def does_not_match?(actual) raise NotImplementedError, '`expect().not_to all( matcher )` is not supported.' end
@api private @return [String]
# File lib/rspec/matchers/built_in/all.rb, line 24 def failure_message all_messages = [improve_hash_formatting(super)] failed_objects.each do |index, matcher_failure_message| all_messages << failure_message_for_item(index, matcher_failure_message) end all_messages.join("\n\n") end
# File lib/rspec/matchers/built_in/all.rb, line 59 def add_new_line_if_needed(message) message.start_with?("\n") ? message : "\n#{message}" end
# File lib/rspec/matchers/built_in/all.rb, line 54 def failure_message_for_item(index, failure_message) failure_message = indent_multiline_message( add_new_line_if_needed(failure_message) ) indent_multiline_message("object at index #{index} failed to match:#{failure_message}") end
# File lib/rspec/matchers/built_in/all.rb, line 63 def indent_multiline_message(message) message = message.sub(/\n+\z/, '') message.lines.map do |line| line =~ /\S/ ? ' ' + line : line end.join end
# File lib/rspec/matchers/built_in/all.rb, line 46 def index_failed_objects actual.each_with_index do |actual_item, index| cloned_matcher = matcher.clone matches = cloned_matcher.matches?(actual_item) failed_objects[index] = cloned_matcher.failure_message unless matches end end
# File lib/rspec/matchers/built_in/all.rb, line 70 def initialize_copy(other) @matcher = @matcher.clone super end
# File lib/rspec/matchers/built_in/all.rb, line 41 def match(_, actual) index_failed_objects failed_objects.empty? end