Passed
Push — master ( 3e6709...a45d4a )
by Daimona
01:41
created

Task::getOperationName()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 2
rs 10
c 0
b 0
f 0
1
<?php declare( strict_types=1 );
2
3
namespace BotRiconferme\Task;
4
5
use BotRiconferme\Task\Subtask\Subtask;
6
use BotRiconferme\TaskResult;
7
8
/**
9
 * Base class for a high-level task.
10
 */
11
abstract class Task extends TaskBase {
12
	/**
13
	 * Get a map of [ 'task name' => 'its class name' ]
14
	 *
15
	 * @return string[]
16
	 */
17
	abstract protected function getSubtasksMap() : array;
18
19
	/**
20
	 * @param string $subtask Defined in self::SUBTASKS_MAP
21
	 * @return TaskResult
22
	 */
23
	protected function runSubtask( string $subtask ) : TaskResult {
24
		$map = $this->getSubtasksMap();
25
		if ( !isset( $map[ $subtask ] ) ) {
26
			throw new \InvalidArgumentException( "'$subtask' is not a valid task." );
27
		}
28
29
		$class = $map[ $subtask ];
30
		return $this->getSubtaskInstance( $class )->run();
31
	}
32
33
	/**
34
	 * @inheritDoc
35
	 */
36
	final protected function getOperationName(): string {
37
		return 'task';
38
	}
39
40
	/**
41
	 * Helper to make type inferencing easier
42
	 *
43
	 * @param string $class
44
	 * @return Subtask
45
	 */
46
	private function getSubtaskInstance( string $class ) : Subtask {
47
		return new $class( $this->getDataProvider() );
48
	}
49
}
50