module RSpec::Expectations

def self.method_handle_for(object, method_name)

def self.method_handle_for(object, method_name)
  KERNEL_METHOD_METHOD.bind(object).call(method_name)
rescue NameError => original
  begin
    handle = object.method(method_name)
    raise original unless handle.is_a? Method
    handle
  rescue Exception
    raise original
  end
end

def self.method_handle_for(object, method_name)

def self.method_handle_for(object, method_name)
  if ::Kernel === object
    KERNEL_METHOD_METHOD.bind(object).call(method_name)
  else
    object.method(method_name)
  end
rescue NameError => original
  begin
    handle = object.method(method_name)
    raise original unless handle.is_a? Method
    handle
  rescue Exception
    raise original
  end
end

def all_strings?(*args)

def all_strings?(*args)
  args.flatten.all? {|a| String === a}
end

def any_multiline_strings?(*args)

def any_multiline_strings?(*args)
  all_strings?(*args) && args.flatten.any? { |a| multiline?(a) }
end

def coerce_to_string(string_or_array)

def coerce_to_string(string_or_array)
  return string_or_array unless Array === string_or_array
  diffably_stringify(string_or_array).join("\n")
end

def diffably_stringify(array)

def diffably_stringify(array)
  array.map do |entry|
    if Array === entry
      entry.inspect
    else
      entry.to_s.gsub("\n", "\\n")
    end
  end
end

def differ

Other tags:
    Private: -
def differ
  @differ ||= Differ.new
end

def differ=(ignore)

Deprecated:
  • (no replacement)
def differ=(ignore)
  RSpec.deprecate("RSpec::Expectations.differ=(differ)")
end

def fail_with(message, expected=nil, actual=nil)

Parameters:
  • actual (Object) --
  • expected (Object) --
  • message (String) --
def fail_with(message, expected=nil, actual=nil)
  if !message
    raise ArgumentError, "Failure message is nil. Does your matcher define the " +
                         "appropriate failure_message_for_* method to return a string?"
  end
  if actual && expected
    if all_strings?(actual, expected)
      if any_multiline_strings?(actual, expected)
        message << "\nDiff:" << differ.diff_as_string(coerce_to_string(actual), coerce_to_string(expected))
      end
    elsif no_procs?(actual, expected) && no_numbers?(actual, expected)
      message << "\nDiff:" << differ.diff_as_object(actual, expected)
    end
  end
  raise(RSpec::Expectations::ExpectationNotMetError.new(message))
end

def multiline?(string)

def multiline?(string)
  string.include?("\n".encode(string.encoding))
end

def multiline?(string)

def multiline?(string)
  string.include?("\n")
end

def no_numbers?(*args)

def no_numbers?(*args)
  args.flatten.none? {|a| Numeric === a}
end

def no_procs?(*args)

def no_procs?(*args)
  args.flatten.none? {|a| Proc === a}
end