Passed
Push — master ( a9840c...5ab0c2 )
by Todd
03:34
created

StrictConfig   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 51
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

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