module RSpec::Expectations::ExpectationHelper

def self.check_message(msg)

def self.check_message(msg)
  unless msg.nil? || msg.respond_to?(:to_str) || msg.respond_to?(:call)
    RSpec.warning(
      "ignoring the provided expectation message argument" \
      "(#{ msg.inspect }) since it is not a string or a proc"
    )
  end
end

def self.handle_failure(matcher, message, failure_message_method)

def self.handle_failure(matcher, message, failure_message_method)
  message = message.call if message.respond_to?(:call)
  message ||= matcher.__send__(failure_message_method)
  if matcher.respond_to?(:diffable?) && matcher.diffable?
    ::RSpec::Expectations.fail_with message, matcher.expected, matcher.actual
  else
    ::RSpec::Expectations.fail_with message
  end
end

def self.modern_matcher_from(matcher)

Other tags:
    Private: -
def self.modern_matcher_from(matcher)
  LegacyMatcherAdapter::RSpec2.wrap(matcher) ||
  LegacyMatcherAdapter::RSpec1.wrap(matcher) || matcher
end

def self.with_matcher(handler, matcher, message)

def self.with_matcher(handler, matcher, message)
  check_message(message)
  matcher = modern_matcher_from(matcher)
  yield matcher
ensure
  ::RSpec::Matchers.last_expectation_handler = handler
  ::RSpec::Matchers.last_matcher = matcher
end