Passed
Pull Request — master (#2)
by Pol
03:05
created

ProcessTask   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 46
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
eloc 26
dl 0
loc 46
ccs 0
cts 21
cp 0
rs 10
c 0
b 0
f 0
wmc 4

1 Method

Rating   Name   Duplication   Size   Complexity  
A run() 0 29 4
1
<?php
2
3
declare(strict_types = 1);
4
5
namespace PhpTaskman\Core\Plugin\Task;
6
7
use PhpTaskman\Core\Contract\ConfigurationTokensAwareInterface;
8
use PhpTaskman\Core\Plugin\BaseTask;
9
use PhpTaskman\Core\Traits\ConfigurationTokensTrait;
10
use Robo\Common\BuilderAwareTrait;
11
use Robo\Common\ResourceExistenceChecker;
12
use Robo\Contract\BuilderAwareInterface;
13
use Robo\Result;
14
use Robo\Task\File\loadTasks;
15
use Robo\Task\File\Replace;
16
use Robo\Task\Filesystem\FilesystemStack;
17
18
final class ProcessTask extends BaseTask implements BuilderAwareInterface, ConfigurationTokensAwareInterface
19
{
20
    use BuilderAwareTrait;
21
    use BuilderAwareTrait;
22
    use ConfigurationTokensTrait;
23
    use loadTasks;
24
    use ResourceExistenceChecker;
25
26
    public const ARGUMENTS = [
27
        'from',
28
        'to',
29
    ];
30
    public const NAME = 'process';
31
32
    /**
33
     * {@inheritdoc}
34
     */
35
    public function run()
36
    {
37
        $arguments = $this->getTaskArguments();
38
39
        $from = $arguments['from'];
40
        $to = $arguments['to'];
41
42
        $filesystem = new FilesystemStack();
43
        $replace = new Replace($to);
44
45
        if (!$this->checkResource($from, 'file')) {
46
            return Result::error($this, "Source file '{$from}' does not exists.");
47
        }
48
49
        $sourceContent = \file_get_contents($from);
50
51
        if (false === $sourceContent) {
52
            return Result::error($this, "Unable to read source file '{$from}'.");
53
        }
54
55
        $tokens = $this->extractProcessedTokens($sourceContent);
56
57
        $tasks = [];
58
        if ($from !== $to) {
59
            $tasks[] = $filesystem->copy($from, $to, true);
60
        }
61
        $tasks[] = $replace->from(\array_keys($tokens))->to(\array_values($tokens));
62
63
        return $this->collectionBuilder()->addTaskList($tasks)->run();
64
    }
65
}
66