Completed
Pull Request — master (#81)
by
unknown
01:14
created

DbDumper::getCompressorExtension()   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
namespace Spatie\DbDumper;
4
5
use Symfony\Component\Process\Process;
6
use Spatie\DbDumper\Exceptions\DumpFailed;
7
use Spatie\DbDumper\Compressors\Compressor;
8
use Spatie\DbDumper\Compressors\GzipCompressor;
9
use Spatie\DbDumper\Exceptions\CannotSetParameter;
10
11
abstract class DbDumper
12
{
13
    /** @var string */
14
    protected $dbName;
15
16
    /** @var string */
17
    protected $userName;
18
19
    /** @var string */
20
    protected $password;
21
22
    /** @var string */
23
    protected $host = 'localhost';
24
25
    /** @var int */
26
    protected $port = 5432;
27
28
    /** @var string */
29
    protected $socket = '';
30
31
    /** @var int */
32
    protected $timeout = 0;
33
34
    /** @var string */
35
    protected $dumpBinaryPath = '';
36
37
    /** @var array */
38
    protected $includeTables = [];
39
40
    /** @var array */
41
    protected $excludeTables = [];
42
43
    /** @var array */
44
    protected $extraOptions = [];
45
46
    /** @var object */
47
    protected $compressor = null;
48
49
    public static function create()
50
    {
51
        return new static();
52
    }
53
54
    public function getDbName(): string
55
    {
56
        return $this->dbName;
57
    }
58
59
    /**
60
     * @param string $dbName
61
     *
62
     * @return $this
63
     */
64
    public function setDbName(string $dbName)
65
    {
66
        $this->dbName = $dbName;
67
68
        return $this;
69
    }
70
71
    /**
72
     * @param string $userName
73
     *
74
     * @return $this
75
     */
76
    public function setUserName(string $userName)
77
    {
78
        $this->userName = $userName;
79
80
        return $this;
81
    }
82
83
    /**
84
     * @param string $password
85
     *
86
     * @return $this
87
     */
88
    public function setPassword(string $password)
89
    {
90
        $this->password = $password;
91
92
        return $this;
93
    }
94
95
    /**
96
     * @param string $host
97
     *
98
     * @return $this
99
     */
100
    public function setHost(string $host)
101
    {
102
        $this->host = $host;
103
104
        return $this;
105
    }
106
107
    public function getHost(): string
108
    {
109
        return $this->host;
110
    }
111
112
    /**
113
     * @param int $port
114
     *
115
     * @return $this
116
     */
117
    public function setPort(int $port)
118
    {
119
        $this->port = $port;
120
121
        return $this;
122
    }
123
124
    /**
125
     * @param string $socket
126
     *
127
     * @return $this
128
     */
129
    public function setSocket(string $socket)
130
    {
131
        $this->socket = $socket;
132
133
        return $this;
134
    }
135
136
    /**
137
     * @param int $timeout
138
     *
139
     * @return $this
140
     */
141
    public function setTimeout(int $timeout)
142
    {
143
        $this->timeout = $timeout;
144
145
        return $this;
146
    }
147
148
    /**
149
     * @param string $dumpBinaryPath
150
     *
151
     * @return $this
152
     */
153
    public function setDumpBinaryPath(string $dumpBinaryPath)
154
    {
155
        if ($dumpBinaryPath !== '' && substr($dumpBinaryPath, -1) !== '/') {
156
            $dumpBinaryPath .= '/';
157
        }
158
159
        $this->dumpBinaryPath = $dumpBinaryPath;
160
161
        return $this;
162
    }
163
164
    /**
165
     * @deprecated
166
     *
167
     * @return $this
168
     */
169
    public function enableCompression()
170
    {
171
        $this->compressor = new GzipCompressor();
172
173
        return $this;
174
    }
175
176
    /**
177
     * @return string
178
     */
179
    public function getCompressorExtension()
180
    {
181
        return $this->compressor->getExtension();
182
    }
183
184
    /**
185
     * Set the given compressor.
186
     *
187
     * @param Compressor $compressor
188
     *
189
     * @return $this
190
     */
191
    public function useCompression(Compressor $compressor)
192
    {
193
        $this->compressor = $compressor;
194
195
        return $this;
196
    }
197
198
    /**
199
     * @param string|array $includeTables
200
     *
201
     * @return $this
202
     *
203
     * @throws \Spatie\DbDumper\Exceptions\CannotSetParameter
204
     */
205 View Code Duplication
    public function includeTables($includeTables)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
206
    {
207
        if (! empty($this->excludeTables)) {
208
            throw CannotSetParameter::conflictingParameters('includeTables', 'excludeTables');
209
        }
210
211
        if (! is_array($includeTables)) {
212
            $includeTables = explode(', ', $includeTables);
213
        }
214
215
        $this->includeTables = $includeTables;
216
217
        return $this;
218
    }
219
220
    /**
221
     * @param string|array $excludeTables
222
     *
223
     * @return $this
224
     *
225
     * @throws \Spatie\DbDumper\Exceptions\CannotSetParameter
226
     */
227 View Code Duplication
    public function excludeTables($excludeTables)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
228
    {
229
        if (! empty($this->includeTables)) {
230
            throw CannotSetParameter::conflictingParameters('excludeTables', 'includeTables');
231
        }
232
233
        if (! is_array($excludeTables)) {
234
            $excludeTables = explode(', ', $excludeTables);
235
        }
236
237
        $this->excludeTables = $excludeTables;
238
239
        return $this;
240
    }
241
242
    /**
243
     * @param string $extraOption
244
     *
245
     * @return $this
246
     */
247
    public function addExtraOption(string $extraOption)
248
    {
249
        if (! empty($extraOption)) {
250
            $this->extraOptions[] = $extraOption;
251
        }
252
253
        return $this;
254
    }
255
256
    abstract public function dumpToFile(string $dumpFile);
257
258
    protected function checkIfDumpWasSuccessFul(Process $process, string $outputFile)
259
    {
260
        if (! $process->isSuccessful()) {
261
            throw DumpFailed::processDidNotEndSuccessfully($process);
262
        }
263
264
        if (! file_exists($outputFile)) {
265
            throw DumpFailed::dumpfileWasNotCreated();
266
        }
267
268
        if (filesize($outputFile) === 0) {
269
            throw DumpFailed::dumpfileWasEmpty();
270
        }
271
    }
272
273
    protected function echoToFile(string $command, string $dumpFile): string
274
    {
275
        $compressor = $this->compressor ? ' | '.$this->compressor->getCommand() : '';
276
        $dumpFile = '"'.addcslashes($dumpFile, '\\"').'"';
277
278
        return $command.$compressor.' > '.$dumpFile;
279
    }
280
}
281