123456789_123456789_123456789_123456789_123456789_

Class: RSpec::Matchers::AliasedNegatedMatcher Private

Do not use. This class is for internal use only.
Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Instance Chain:
Inherits: RSpec::Matchers::AliasedMatcher
Defined in: rspec-expectations/lib/rspec/matchers/aliased_matcher.rb

Constant Summary

Class Method Summary

AliasedMatcher - Inherited

MatcherDelegator - Inherited

Instance Attribute Summary

Instance Method Summary

AliasedMatcher - Inherited

#description

Provides the description of the aliased matcher.

#failure_message

Provides the failure_message of the aliased matcher.

#failure_message_when_negated

Provides the failure_message_when_negated of the aliased matcher.

#method_missing

Forward messages on to the wrapped matcher.

MatcherDelegator - Inherited

Composable - Included

#&

Alias for Composable#and.

#===

Delegates to #matches?.

#and

Creates a compound and expectation.

#description_of

Returns the description of the given object in a way that is aware of composed matchers.

#or

Creates a compound or expectation.

#values_match?

This provides a generic way to fuzzy-match an expected value against an actual value.

#|

Alias for Composable#or.

#should_enumerate?

We should enumerate arrays as long as they are not recursive.

#surface_descriptions_in

Transforms the given data structure (typically a hash or array) into a new data structure that, when #inspect is called on it, will provide descriptions of any contained matchers rather than the normal #inspect output.

#unreadable_io?,
#with_matchers_cloned

Historically, a single matcher instance was only checked against a single value.

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class RSpec::Matchers::AliasedMatcher

Instance Method Details

#does_not_match?(*args, &block) ⇒ Boolean

[ GitHub ]

  
# File 'rspec-expectations/lib/rspec/matchers/aliased_matcher.rb', line 80

def does_not_match?(*args, &block)
  @base_matcher.matches?(*args, &block)
end

#failure_message

[ GitHub ]

  
# File 'rspec-expectations/lib/rspec/matchers/aliased_matcher.rb', line 84

def failure_message
  optimal_failure_message(__method__, :failure_message_when_negated)
end

#failure_message_when_negated

[ GitHub ]

  
# File 'rspec-expectations/lib/rspec/matchers/aliased_matcher.rb', line 88

def failure_message_when_negated
  optimal_failure_message(__method__, :failure_message)
end

#matches?(*args, &block) ⇒ Boolean

[ GitHub ]

  
# File 'rspec-expectations/lib/rspec/matchers/aliased_matcher.rb', line 72

def matches?(*args, &block)
  if @base_matcher.respond_to?(:does_not_match?)
    @base_matcher.does_not_match?(*args, &block)
  else
    !super
  end
end

#optimal_failure_message(same, inverted) (private)

For a matcher that uses the default failure messages, we prefer to use the override provided by the description_block, because it includes the phrasing that the user has expressed a preference for by going through the effort of defining a negated matcher.

However, if the override didn’t actually change anything, then we should return the opposite failure message instead – the overridden message is going to be confusing if we return it as-is, as it represents the non-negated failure message for a negated match (or vice versa).

[ GitHub ]

  
# File 'rspec-expectations/lib/rspec/matchers/aliased_matcher.rb', line 105

def optimal_failure_message(same, inverted)
  if DefaultFailureMessages.has_default_failure_messages?(@base_matcher)
    base_message = @base_matcher.__send__(same)
    overridden    = @description_block.call(base_message)
    return overridden if overridden != base_message
  end

  @base_matcher.__send__(inverted)
end