StrictConfig   A
last analyzed

Complexity

Total Complexity 13

Size/Duplication

Total Lines 51
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 13
eloc 18
dl 0
loc 51
ccs 27
cts 27
cp 1
rs 10
c 0
b 0
f 0

8 Methods

Rating   Name   Duplication   Size   Complexity  
A validate() 0 3 2
A addFields() 0 2 1
A onConstruct() 0 2 1
A fieldValidationResult() 0 2 1
A validationMessages() 0 7 3
A isValid() 0 6 3
A fieldValidationMessages() 0 2 1
A isFieldValid() 0 2 1
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
}