# File lib/bacon.rb, line 294 def initialize(object) @object = object @negated = false end
# File lib/bacon.rb, line 309 def be(*args, &block) if args.empty? self else block = args.shift unless block_given? satisfy(*args, &block) end end
# File lib/bacon.rb, line 346 def equal(value) self == value end
# File lib/bacon.rb, line 351 def flunk(reason="Flunked") raise Bacon::Error.new(:failed, reason) end
# File lib/bacon.rb, line 348 def identical_to(value) self.equal? value end
# File lib/bacon.rb, line 347 def match(value) self =~ value end
# File lib/bacon.rb, line 336 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
# File lib/bacon.rb, line 299 def not(*args, &block) @negated = !@negated if args.empty? self else be(*args, &block) end end
# File lib/bacon.rb, line 321 def satisfy(*args, &block) if args.size == 1 && String === args.first description = args.shift else description = "" end r = yield(@object, *args) if Bacon::Counter[:depth] > 0 Bacon::Counter[:requirements] += 1 raise Bacon::Error.new(:failed, description) unless @negated ^ r end @negated ^ r ? r : false end