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

StrictConfig::addFields()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 2
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
eloc 1
nc 1
nop 1
crap 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
}