CMDKit::setCommandPTS()   A
last analyzed

Complexity

Conditions 4
Paths 6

Size

Total Lines 16
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 4
eloc 8
c 1
b 0
f 1
nc 6
nop 3
dl 0
loc 16
rs 10
1
<?php
2
/**
3
 * Command kit
4
 * User: moyo
5
 * Date: 13/12/2017
6
 * Time: 4:04 PM
7
 */
8
9
namespace Carno\Console\Chips;
10
11
use Carno\Console\Configure;
12
use Carno\Console\Proxy;
13
use ReflectionClass;
14
15
trait CMDKit
16
{
17
    /**
18
     * @param Proxy $cmd
19
     * @param string $class
20
     * @param array $names
21
     * @return Proxy
22
     */
23
    protected function setCommandPTS(Proxy $cmd, string $class, array $names) : Proxy
24
    {
25
        $pts = $this->getCommandPTS($class, $names);
26
27
        foreach ($pts as $name => $value) {
28
            $setter = sprintf('set%s', ucfirst($name));
29
            if (method_exists($cmd, $setter)) {
30
                $cmd->$setter($value);
31
            }
32
        }
33
34
        if (method_exists($cmd->getCommand(), 'configure')) {
35
            call_user_func_array([$cmd->getCommand(), 'configure'], [new Configure($cmd)]);
36
        }
37
38
        return $cmd;
39
    }
40
41
    /**
42
     * @param string $class
43
     * @param array $pts
44
     * @return array
45
     */
46
    private function getCommandPTS(string $class, array $pts) : array
47
    {
48
        $defaults = (new ReflectionClass($class))->getDefaultProperties();
49
50
        $values = [];
51
52
        foreach ($pts as $name) {
53
            isset($defaults[$name]) && $values[$name] = $defaults[$name];
54
        }
55
56
        return $values;
57
    }
58
}
59