Task   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 42
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 13
dl 0
loc 42
rs 10
c 0
b 0
f 0
wmc 4

3 Methods

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