code: function Rule(spec, parentAudit) {
  	'use strict';
  
  	this._audit = parentAudit;
  
  	/**
  	 * The code, or string ID of the rule
  	 * @type {String}
  	 */
  	this.id = spec.id;
  
  	/**
  	 * Selector that this rule applies to
  	 * @type {String}
  	 */
  	this.selector = spec.selector || '*';
  
  	/**
  	 * Whether to exclude hiddden elements form analysis.  Defaults to true.
  	 * @type {Boolean}
  	 */
  	this.excludeHidden =
  		typeof spec.excludeHidden === 'boolean' ? spec.excludeHidden : true;
  
  	/**
  	 * Flag to enable or disable rule
  	 * @type {Boolean}
  	 */
  	this.enabled = typeof spec.enabled === 'boolean' ? spec.enabled : true;
  
  	/**
  	 * Denotes if the rule should be run if Context is not an entire page AND whether
  	 * the Rule should be satisified regardless of Node
  	 * @type {Boolean}
  	 */
  	this.pageLevel = typeof spec.pageLevel === 'boolean' ? spec.pageLevel : false;
  
  	/**
  	 * Checks that any may return true to satisfy rule
  	 * @type {Array}
  	 */
  	this.any = spec.any || [];
  
  	/**
  	 * Checks that must all return true to satisfy rule
  	 * @type {Array}
  	 */
  	this.all = spec.all || [];
  
  	/**
  	 * Checks that none may return true to satisfy rule
  	 * @type {Array}
  	 */
  	this.none = spec.none || [];
  
  	/**
  	 * Tags associated to this rule
  	 * @type {Array}
  	 */
  	this.tags = spec.tags || [];
  
  	/**
  	 * Preload necessary for this rule
  	 */
  	this.preload = spec.preload ? true : false;
  
  	if (spec.matches) {
  		/**
  		 * Optional function to test if rule should be run against a node, overrides Rule#matches
  		 * @type {Function}
  		 */
  		this.matches = createExecutionContext(spec.matches);
  	}
  }
docs: /*global RuleResult, createExecutionContext, SupportError