ModelClosure   A
last analyzed

Complexity

Total Complexity 11

Size/Duplication

Total Lines 51
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 11
lcom 1
cbo 0
dl 0
loc 51
ccs 23
cts 23
cp 1
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getFromModel() 0 8 2
A setToModel() 0 8 2
A createGetFromModelClosure() 0 16 5
A createFillModelClosure() 0 8 2
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