TasksParser   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 55
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 19
c 1
b 0
f 0
dl 0
loc 55
ccs 0
cts 16
cp 0
rs 10
wmc 6

2 Methods

Rating   Name   Duplication   Size   Complexity  
A guessParentClass() 0 15 4
A parse() 0 12 2
1
<?php
2
3
namespace Cerbero\ConsoleTasker\Console;
4
5
use Cerbero\ConsoleTasker\Tasks;
6
use Cerbero\ConsoleTasker\Traits\ConfigAware;
7
use Illuminate\Support\Str;
8
9
/**
10
 * The tasks parser.
11
 *
12
 */
13
class TasksParser
14
{
15
    use ConfigAware;
16
17
    /**
18
     * The parent class map.
19
     *
20
     * @var array
21
     */
22
    protected $parentClassMap = [
23
        'c' => Tasks\AbstractCreatorTask::class,
24
        'u' => Tasks\AbstractFilesManipulatorTask::class,
25
    ];
26
27
    /**
28
     * Parse the tasks contained in the given input
29
     *
30
     * @param string $input
31
     * @return ParsedTasks[]
32
     */
33
    public function parse(string $input): array
34
    {
35
        $parsedTasks = [];
36
        $rawTasks = explode(',', $input);
37
38
        foreach ($rawTasks as $rawTask) {
39
            $parsedTasks[] = $parsedTask = new ParsedTask();
40
            $parsedTask->name = explode(':', $rawTask)[0];
41
            $parsedTask->parentClass = $this->guessParentClass($rawTask);
42
        }
43
44
        return $parsedTasks;
45
    }
46
47
    /**
48
     * Retrieve the guessed parent task class
49
     *
50
     * @param string $rawTask
51
     * @return string
52
     */
53
    protected function guessParentClass(string $rawTask): string
54
    {
55
        $segments = explode(':', $rawTask);
56
57
        if ($key = $segments[1] ?? null) {
58
            return $this->parentClassMap[$key] ?? Tasks\AbstractTask::class;
59
        }
60
61
        foreach ($this->config('verbs') as $class => $verbs) {
62
            if (Str::startsWith(strtolower($segments[0]), $verbs)) {
63
                return $class;
64
            }
65
        }
66
67
        return Tasks\AbstractTask::class;
68
    }
69
}
70