code: function Base(condition, negate) {
    // Set up flags
    var self = this;
    this.flags = {
      not: false,
      deep: false,
      chain: false,
      noCase: false,
      unordered: false
    };
  
    // Add this condition to the current list
    this.current = [{
      val: condition,
      negate: negate,
      actual: condition
    }];
  
    // Set up helpers
    _.each(['And', 'But', 'Or', 'Xor'], function(joiner) {
      self.__defineGetter__(joiner, function() {
        return utils.delegate(self.test(), joiner.toLowerCase());
      });
    });
    _.each(['does', 'should', 'has', 'have', 'is', 'to', 'be', 'been'], function(getter) {
      self.__defineGetter__(getter, function() {
        return self;
      });
    });
    _.each(['deep', 'deeply'], function(getter) {
      self.__defineGetter__(getter, function() {
        self.flags.deep = true;
        return self;
      });
    });
    self.__defineGetter__('roughly', function() {
      self.flags.unordered = true;
      return self;
    });
    self.__defineGetter__('not', function() {
      self.flags.not = true;
      return self;
    });
    self.__defineGetter__('Not', function() {
      self.flags.groupNot = true;
      return self;
    });
    _.each(['noCase', 'caseless'], function(getter) {
      self.__defineGetter__(getter, function() {
        self.flags.noCase = true;
        return self;
      });
    });
  }
docs: Base
  
  Underlying class for the other boolean helpers
  @private
  @constructor
  @param {*} condition - The thing to be evaluated
  @param {boolean} negate - Whether the first group is negated