StrictConfig::validate()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 3
ccs 3
cts 3
cp 1
rs 10
c 0
b 0
f 0
cc 2
eloc 2
nc 2
nop 0
crap 2
1
<?php
2
3
namespace Logikos\Util\Config;
4
5
use Logikos\Util\Config;
6
use Logikos\Util\Validation;
7
8
abstract class StrictConfig extends Config {
9
10
  /** @var  Field[] */
11
  private $_fields = [];
12
13 11
  public final function onConstruct() {
14 11
    $this->initialize();
15 11
  }
16
17
  abstract protected function initialize();
18
19 5
  public function isValid() {
20 5
    foreach ($this->_fields as $field) {
21 5
      if (!$this->isFieldValid($field))
22 5
        return false;
23
    }
24 2
    return true;
25
  }
26
27 3
  public function validate() {
28 3
    if (!$this->isValid())
29 1
      throw new InvalidConfigStateException($this);
30 2
  }
31
32 6
  public function validationMessages() {
33 6
    $failures = [];
34 6
    foreach ($this->_fields as $field) {
35 5
      if (!$this->isFieldValid($field))
36 5
        $failures[$field->getName()] = $this->fieldValidationMessages($field);
37
    }
38 6
    return $failures;
39
  }
40
41 9
  protected function addFields(Field ...$fields) {
42 9
    $this->_fields = $fields;
43 9
  }
44
45 5
  protected function fieldValidationMessages(Field $field) {
46 5
    return $this->fieldValidationResult($field)->getMessages();
47
  }
48
49 9
  protected function isFieldValid(Field $field) {
50 9
    return $this->fieldValidationResult($field)->isValid();
51
  }
52
53
  /**
54
   * @param Field $field
55
   * @return Validation\Result
56
   */
57 9
  protected function fieldValidationResult(Field $field): Validation\Result {
58 9
    return $field->validate($this->get($field->getName()));
59
  }
60
61
}