Bristol SU Support Package
LogicTesterResult.php
Go to the documentation of this file.
1 <?php
2 
4 
9 
14 {
15 
21  private $passes = [];
22 
28  private $fails = [];
29 
35  private $required = [];
36 
42  private $overrideResult;
43 
49  private $default = false;
50 
59  public function pass($userModel = null, $groupModel = null, $roleModel = null)
60  {
61  $this->passes[] = $this->parseArguments($userModel, $groupModel, $roleModel);
62  return $this;
63  }
64 
73  private function parseArguments($userModel = null, $groupModel = null, $roleModel = null)
74  {
75  return [($userModel instanceof User ? $userModel->id() : null), ($groupModel instanceof Group ? $groupModel->id() : null), ($roleModel instanceof Role ? $roleModel->id() : null)];
76  }
77 
86  public function fail($userModel = null, $groupModel = null, $roleModel = null)
87  {
88  $this->fails[] = $this->parseArguments($userModel, $groupModel, $roleModel);
89  return $this;
90  }
91 
100  public function shouldBeCalled($userModel = null, $groupModel = null, $roleModel = null)
101  {
102  $this->required[] = $this->parseArguments($userModel, $groupModel, $roleModel);
103  return $this;
104  }
105 
112  public function otherwise(bool $value = true)
113  {
114  $this->default = $value;
115  return $this;
116  }
117 
121  public function alwaysPass()
122  {
123  $this->overrideResult = true;
124  }
125 
129  public function alwaysFail()
130  {
131  $this->overrideResult = false;
132  }
133 
142  public function evaluate($userModel = null, $groupModel = null, $roleModel = null): bool
143  {
144  $args = $this->parseArguments($userModel, $groupModel, $roleModel);
145  $this->required = array_filter($this->required, function($parameters) use ($args) {
146  return $parameters !== $args;
147  });
148 
149  if ($this->overrideResult !== null) {
150  return $this->overrideResult;
151  }
152 
153  if (in_array($args, $this->passes)) {
154  return true;
155  }
156  if (in_array($args, $this->fails)) {
157  return false;
158  }
159  return $this->default;
160  }
161 
165  public function __destruct()
166  {
167  Assert::assertCount(0, $this->required, 'Not all logic tests have been called.');
168  }
169 
170 }
shouldBeCalled($userModel=null, $groupModel=null, $roleModel=null)
parseArguments($userModel=null, $groupModel=null, $roleModel=null)
evaluate($userModel=null, $groupModel=null, $roleModel=null)
fail($userModel=null, $groupModel=null, $roleModel=null)
pass($userModel=null, $groupModel=null, $roleModel=null)