Completed
Push — master ( 39f90d...592e2d )
by Alexpts
03:43
created

ModelClosure::createFillModelClosure()   A

Complexity

Conditions 2
Paths 1

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 2

Importance

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