Completed
Push — master ( 3260ca...0c0ec5 )
by Christian
02:12
created

ProcessArguments::createProcess()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

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