ModelClosure::setToModel()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 0
dl 0
loc 8
ccs 4
cts 4
cp 1
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
declare(strict_types = 1);
3
4
namespace PTS\DataTransformer;
5
6
class ModelClosure
7
{
8
    /** @var \Closure */
9
    protected $fillModel;
10
    /** @var \Closure */
11
    protected $fromModel;
12
13 5
    public function getFromModel(): \Closure
14
    {
15 5
        if ($this->fromModel === null) {
16 5
            $this->fromModel = $this->createGetFromModelClosure();
17
        }
18
19 5
        return $this->fromModel;
20
    }
21
22 3
    public function setToModel(): \Closure
23
    {
24 3
        if ($this->fillModel === null) {
25 3
            $this->fillModel = $this->createFillModelClosure();
26
        }
27
28 3
        return $this->fillModel;
29
    }
30
31 5
    protected function createGetFromModelClosure(): \Closure
32
    {
33
        return function($getter, $propVal) {
34 4
            $val = null;
35
36 4
            if ($getter !== null) {
37 4
                $method = is_array($getter) ? $getter[0] : $getter;
38 4
                $args = is_array($getter) ? $getter[1] : [];
39 4
                $val = call_user_func_array([$this, $method], $args);
40 4
            } elseif (property_exists($this, $propVal)) {
41 4
                $val = $this->{$propVal};
42
            }
43
44 4
            return $val;
45 5
        };
46
    }
47
48
    protected function createFillModelClosure(): \Closure
49
    {
50 3
        return function($setter, $val, $modelName) {
51 2
            $setter
52 2
                ? call_user_func([$this, $setter], $val)
53 2
                : $this->{$modelName} = $val;
54 3
        };
55
    }
56
}
57