@@ -20,56 +20,47 @@ class Not extends AbstractRule
2020
2121 public function __construct (Validatable $ rule )
2222 {
23- if ($ rule instanceof AllOff) {
24- $ rule = $ this ->absorbComposite ($ rule );
25- }
26-
2723 $ this ->rule = $ rule ;
2824 }
2925
3026 public function validate ($ input )
3127 {
32- if ($ this ->rule instanceof AllOff) {
33- return $ this ->rule ->validate ($ input );
34- }
35-
36- return !$ this ->rule ->validate ($ input );
28+ return (false == $ this ->rule ->validate ($ input ));
3729 }
3830
3931 public function assert ($ input )
4032 {
41- if ($ this ->rule instanceof AllOff ) {
42- return $ this -> rule -> assert ( $ input ) ;
33+ if ($ this ->validate ( $ input ) ) {
34+ return true ;
4335 }
4436
45- try {
46- $ this ->rule ->assert ($ input );
47- } catch (ValidationException $ e ) {
48- return true ;
37+ $ rule = $ this ->rule ;
38+ if ($ rule instanceof AllOf) {
39+ $ rule = $ this ->absorbAllOf ($ rule , $ input );
4940 }
5041
51- throw $ this -> rule
42+ throw $ rule
5243 ->reportError ($ input )
5344 ->setMode (ValidationException::MODE_NEGATIVE );
5445 }
5546
56- protected function absorbComposite ( AbstractComposite $ compositeRule )
47+ private function absorbAllOf ( AllOf $ rule , $ input )
5748 {
58- if (!$ compositeRule instanceof AllOff) {
59- return $ compositeRule ;
60- }
61-
62- $ compositeRuleClone = clone $ compositeRule ;
63- $ compositeRuleClone ->removeRules ();
49+ $ rules = $ rule ->getRules ();
50+ $ current = null ;
51+ while (($ current = array_shift ($ rules ))) {
52+ $ rule = $ current ;
53+ if (!$ rule instanceof AllOf) {
54+ continue ;
55+ }
6456
65- foreach ($ compositeRule ->getRules () as $ rule ) {
66- if ($ rule instanceof AbstractComposite) {
67- $ compositeRuleClone ->addRule ($ this ->absorbComposite ($ rule ));
68- } else {
69- $ compositeRuleClone ->addRule (new static ($ rule ));
57+ if (!$ rule ->validate ($ input )) {
58+ continue ;
7059 }
60+
61+ $ rules = $ rule ->getRules ();
7162 }
7263
73- return $ compositeRuleClone ;
64+ return $ rule ;
7465 }
7566}
0 commit comments