class Should
def be(*args, &block)
def be(*args, &block) if args.empty? self else block = args.shift unless block_given? satisfy(*args, &block) end end
def equal(value) self == value end
def equal(value) self == value end
def flunk(reason="Flunked")
def flunk(reason="Flunked") raise Bacon::Error.new(:failed, reason) end
def identical_to(value) self.equal? value end
def identical_to(value) self.equal? value end
def initialize(object)
def initialize(object) @object = object @negated = false end
def match(value) self =~ value end
def match(value) self =~ value end
def method_missing(name, *args, &block)
def method_missing(name, *args, &block) name = "#{name}?" if name.to_s =~ /\w[^?]\z/ desc = @negated ? "not " : "" desc << @object.inspect << "." << name.to_s desc << "(" << args.map{|x|x.inspect}.join(", ") << ") failed" satisfy(desc) { |x| x.__send__(name, *args, &block) } end
def not(*args, &block)
def not(*args, &block) @negated = !@negated if args.empty? self else be(*args, &block) end end
def satisfy(description="", &block)
def satisfy(description="", &block) r = yield(@object) if Bacon::Counter[:depth] > 0 Bacon::Counter[:requirements] += 1 raise Bacon::Error.new(:failed, description) unless @negated ^ r r else @negated ? !r : !!r end end