Completed
Push — master ( ad83ed...4c8d32 )
by James Ekow Abaka
03:09
created

ModelValidator::__construct()   B

Complexity

Conditions 4
Paths 8

Size

Total Lines 27
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 10.3998

Importance

Changes 4
Bugs 0 Features 1
Metric Value
c 4
b 0
f 1
dl 0
loc 27
ccs 5
cts 19
cp 0.2632
rs 8.5806
cc 4
eloc 18
nc 8
nop 2
crap 10.3998
1
<?php
2
namespace ntentan\nibii;
3
4
class ModelValidator extends \ntentan\utils\Validator
5
{
6
    private $model;
7
    
8
    /**
9
     * 
10
     * @param RecordWrapper
11
     */
12 10
    public function __construct($model, $mode) {
13 10
        $pk = null;
14 10
        $rules = [];
15 10
        $this->model = $model;
16 10
        $description = $model->getDescription();
17
18
        if($description->getAutoPrimaryKey()) {
19
            $pk = $description->getPrimaryKey()[0];
20
        }
21
22
        $fields = $description->getFields();
23
        foreach($fields as $field) {
24
            $this->getFieldRules($rules, $field, $pk);
25
        }
26
        
27
        $unique = $description->getUniqueKeys();
28
        foreach($unique as $constraints) {
29
            $rules['unique'][] = [$constraints['fields']];
30
        }
31
        
32
        $this->setRules($rules);
33
        $this->registerValidation(
34
            'unique', 
35
            '\ntentan\nibii\validations\UniqueValidation',
36
            ['model' => $model, 'mode' => $mode]
37
        );        
38
    }
39
40
    private function getFieldRules(&$rules, $field, $pk)
41
    {
42
        if($field['required'] && $field['name'] != $pk && $field['default'] === null) {
43
            $rules['required'][] = $field['name'];
44
        }
45
        if($field['type'] === 'integer' || $field['type'] === 'double') {
46
            $rules['numeric'][] = $field['name'];
47
        }
48
    }
49
}
50