Completed
Push — develop ( c8bccb...27dcf1 )
by Tom
04:44
created

ProcessArguments::addArgs()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 10
rs 9.4285
cc 2
eloc 5
nc 2
nop 3
1
<?php
2
/*
3
 * @author Tom Klingenberg <https://github.com/ktomk>
4
 */
5
6
namespace N98\Util;
7
8
use Symfony\Component\Process\ProcessBuilder;
9
10
/**
11
 * Utility class handling arguments building in use with ProcessBuilder
12
 *
13
 * @see ProcessBuilder
14
 * @package N98\Util
15
 */
16
class ProcessArguments
17
{
18
    private $arguments;
19
20
    public static function create(array $arguments = array())
21
    {
22
        return new self($arguments);
23
    }
24
25
    public function __construct(array $arguments = array())
26
    {
27
        $this->arguments = $arguments;
28
    }
29
30
    /**
31
     * @param $argument
32
     * @return $this
33
     */
34
    public function addArg($argument)
35
    {
36
        $this->arguments[] = $argument;
37
38
        return $this;
39
    }
40
41
    /**
42
     * @param array $arguments
43
     * @param string $separator [optional]
44
     * @param string $prefix [optional]
45
     * @return $this
46
     */
47
    public function addArgs(array $arguments, $separator = '=', $prefix = '--')
48
    {
49
        foreach ($arguments as $key => $value) {
50
            $this->addArg(
51
                $this->conditional($key, $value, $separator, $prefix)
52
            );
53
        }
54
55
        return $this;
56
    }
57
58
    /**
59
     * @param string $key
60
     * @param string|true $value
61
     * @param string $separator
62
     * @param string $prefix
63
     * @return string
64
     */
65
    private function conditional($key, $value, $separator = '=', $prefix = '--')
66
    {
67
        $buffer = (string)$value;
68
69
        if (is_string($key) && strlen($key)) {
70
            $buffer = $this->conditionalPrefix($key, $prefix) . $this->conditionalValue($value, $separator);
71
        }
72
73
        return $buffer;
74
    }
75
76
    /**
77
     * @param string $arg
78
     * @param string $prefix
79
     * @return string
80
     */
81
    private function conditionalPrefix($arg, $prefix = '--')
82
    {
83
        if ('-' === $arg[0]) {
84
            return $arg;
85
        }
86
87
        return "$prefix$arg";
88
    }
89
90
    /**
91
     * @param string|true $value
92
     * @param string $separator
93
     * @return string
94
     */
95
    private function conditionalValue($value, $separator = '=')
96
    {
97
        if ($value === true) {
98
            return '';
99
        }
100
101
        return $separator . $value;
102
    }
103
104
    /**
105
     * @return ProcessBuilder
106
     */
107
    public function createBuilder()
108
    {
109
        return new ProcessBuilder($this->arguments);
110
    }
111
}
112