class RSpec::Matchers::Exist

Public Class Methods

new(*args) click to toggle source
# File lib/rspec/matchers/exist.rb, line 6
def initialize(*args)
  super(args)
end

Public Instance Methods

matches?(actual) click to toggle source
# File lib/rspec/matchers/exist.rb, line 10
def matches?(actual)
  super(actual)
  predicates = [:exist?, :exists?].select { |p| actual.respond_to?(p) }
  existance_values = predicates.map { |p| actual.send(p, *expected) }
  uniq_truthy_values = existance_values.map { |v| !!v }.uniq

  case uniq_truthy_values.size
  when 0; raise NoMethodError.new("#{actual.inspect} does not respond to either #exist? or #exists?")
  when 1; existance_values.first
  else raise "#exist? and #exists? returned different values:\n\n" +
    " exist?: #{existance_values.first}\n" +
    "exists?: #{existance_values.last}"
  end
end