public function apply($testable) {
		$violations = array();
		$warnings = array();
		$success = true;

		foreach ($this->_rules as $ruleSet) {
			$rule = $ruleSet['rule'];
			$options = $ruleSet['options'];
			$rule->apply($testable, $options);
			$warnings = array_merge($warnings, $rule->warnings());

			if (!$rule->success()) {
				$success = false;
				$violations = array_merge($violations, $rule->violations());
			}
			$rule->reset();
		}
		return compact('violations', 'success', 'warnings');
	}