class RSpec::Matchers::BuiltIn::All

Experimental RBS support (using type sampling data from the type_fusion project).

# sig/rspec/matchers/built_in/all.rbs

class RSpec::Matchers::BuiltIn::All < RSpec::Matchers::BuiltIn::BaseMatcher
  def iterable?: () -> true
end

Not intended to be instantiated directly.
Provides the implementation for ‘all`.
@api private

def add_new_line_if_needed(message)

def add_new_line_if_needed(message)
  message.start_with?("\n") ? message : "\n#{message}"
end

def description

Returns:
  • (String) -

Other tags:
    Api: - private
def description
  improve_hash_formatting "all #{description_of matcher}"
end

def does_not_match?(_actual)

Other tags:
    Private: -
def does_not_match?(_actual)
  raise NotImplementedError, '`expect().not_to all( matcher )` is not supported.'
end

def failure_message

Returns:
  • (String) -

Other tags:
    Api: - private
def failure_message
  unless iterable?
    return "#{improve_hash_formatting(super)}, but was not iterable"
  end
  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

def failure_message_for_item(index, failure_message)

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

def indent_multiline_message(message)

def indent_multiline_message(message)
  message = message.sub(/\n+\z/, '')
  message.lines.map do |line|
    line =~ /\S/ ? '   ' + line : line
  end.join
end

def index_failed_objects

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

def initialize(matcher)

def initialize(matcher)
  @matcher = matcher
  @failed_objects = {}
end

def initialize_copy(other)

def initialize_copy(other)
  @matcher = @matcher.clone
  @failed_objects = @failed_objects.clone
  super
end

def iterable?

Experimental RBS support (using type sampling data from the type_fusion project).

def iterable?: () -> true

This signature was generated using 1 sample from 1 application.

def iterable?
  @actual.respond_to?(:each_with_index)
end

def match(_expected, _actual)

def match(_expected, _actual)
  return false unless iterable?
  index_failed_objects
  failed_objects.empty?
end