Completed
Push — master ( 9ce9ac...55298c )
by CodexShaper
02:13
created

Dumper::isWindows()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 1
nc 2
nop 0
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace CodexShaper\Dumper;
4
5
use CodexShaper\Dumper\Contracts\Dumper as DumperContract;
6
use CodexShaper\Dumper\Traits\DumperTrait;
7
use CodexShaper\Dumper\Traits\PrepareOptionsTrait;
8
use Symfony\Component\Process\Exception\ProcessFailedException;
9
use Symfony\Component\Process\Process;
10
11
abstract class Dumper implements DumperContract
12
{
13
    use DumperTrait, PrepareOptionsTrait;
0 ignored issues
show
Bug introduced by
The trait CodexShaper\Dumper\Traits\PrepareOptionsTrait requires the property $createTables which is not provided by CodexShaper\Dumper\Dumper.
Loading history...
14
15 118
    public function __construct(array $options = [])
16
    {
17 118
        foreach ($options as $option => $value) {
18
            if (property_exists($this, $option)) {
19
                $this->{$option} = $value;
20
            }
21
        }
22 118
    }
23
    /**
24
     * @return $this
25
     */
26 118
    public static function create(array $options = [])
27
    {
28 118
        return new static($options);
29
    }
30
    /**
31
     * @return \Symfony\Component\Process\Process
32
     */
33
    protected function prepareProcessCommand()
34
    {
35
        $process = Process::fromShellCommandline($this->command);
36
        $process->setTimeout($this->timeout);
37
        return $process;
38
    }
39
    /**
40
     * @return \Symfony\Component\Process\Process
41
     */
42
    protected function run()
43
    {
44
        try {
45
46
            $process = Process::fromShellCommandline($this->command);
47
            $process->setTimeout($this->timeout);
48
49
            if ($this->debug) {
50
                return $process->mustRun();
51
            }
52
53
            return $process->run();
0 ignored issues
show
Bug Best Practice introduced by
The expression return $process->run() returns the type integer which is incompatible with the documented return type Symfony\Component\Process\Process.
Loading history...
54
55
        } catch (ProcessFailedException $e) {
56
            throw new \Exception($e->getMessage());
57
58
        }
59
    }
60
61
    abstract public function dump();
62
    abstract public function restore();
63
64 76
    public function getDumpCommand(string $credentialFile = '', $destinationPath = '')
65
    {
66 76
        $destinationPath = !empty($destinationPath) ? $destinationPath : $this->destinationPath;
67 76
        switch (strtolower($this->getDumperClassName())) {
68 76
            case 'mysqldumper':
69 28
                $dumpCommand = $this->prepareDumpCommand($credentialFile, $destinationPath);
0 ignored issues
show
Bug introduced by
The method prepareDumpCommand() does not exist on CodexShaper\Dumper\Dumper. Since it exists in all sub-types, consider adding an abstract or default implementation to CodexShaper\Dumper\Dumper. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

69
                /** @scrutinizer ignore-call */ 
70
                $dumpCommand = $this->prepareDumpCommand($credentialFile, $destinationPath);
Loading history...
70 28
                break;
71
            default:
72 48
                $dumpCommand = $this->prepareDumpCommand($destinationPath);
73 48
                break;
74
        }
75
76 76
        return $this->removeExtraSpaces($dumpCommand);
77
    }
78
79 32
    public function getRestoreCommand(string $credentialFile = '', string $filePath = '')
80
    {
81 32
        $filePath = !empty($filePath) ? '"' . $filePath : $this->restorePath;
82 32
        switch (strtolower($this->getDumperClassName())) {
83 32
            case 'mysqldumper':
84 6
                $restoreCommand = $this->prepareRestoreCommand($credentialFile, $filePath);
0 ignored issues
show
Bug introduced by
The method prepareRestoreCommand() does not exist on CodexShaper\Dumper\Dumper. Did you maybe mean prepareProcessCommand()? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

84
                /** @scrutinizer ignore-call */ 
85
                $restoreCommand = $this->prepareRestoreCommand($credentialFile, $filePath);

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
85 6
                break;
86
            default:
87 26
                $restoreCommand = $this->prepareRestoreCommand($filePath);
88 26
                break;
89
        }
90
91 32
        return $this->removeExtraSpaces($restoreCommand);
92
    }
93
94 108
    public function getDumperClassName()
95
    {
96 108
        $classWithNamespace = static::class;
97 108
        $partials           = explode("\\", $classWithNamespace);
98 108
        $className          = end($partials);
99 108
        return $className;
100
    }
101
102 108
    public function removeExtraSpaces(string $str)
103
    {
104 108
        return preg_replace('/\s+/', ' ', $str);
105
    }
106
107 108
    public static function isWindows()
108
    {
109 108
        return strcasecmp(substr(PHP_OS, 0, 3), 'WIN') == 0 ? true : false;
110
    }
111
112 108
    public function quoteCommand(string $command)
113
    {
114 108
        return static::isWindows() ? "\"{$command}\"" : "'{$command}'";
115
    }
116
}
117