MessageProvider   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 45
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 17
dl 0
loc 45
rs 10
c 0
b 0
f 0
wmc 6

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getMessage() 0 7 2
A grabWikiMessages() 0 9 3
A __construct() 0 3 1
1
<?php declare( strict_types = 1 );
2
3
namespace BotRiconferme;
4
5
use BotRiconferme\Exception\MessageNotFoundException;
6
use BotRiconferme\Exception\MessagesPageDoesNotExistException;
7
use BotRiconferme\Exception\MissingPageException;
8
use BotRiconferme\Message\Message;
9
use BotRiconferme\Wiki\Wiki;
10
11
class MessageProvider {
12
	/** @var string[]|null */
13
	private static $messages;
14
15
	/** @var Wiki */
16
	private $wiki;
17
	/** @var string */
18
	private $msgTitle;
19
20
	/**
21
	 * @param Wiki $wiki
22
	 * @param string $msgTitle
23
	 */
24
	public function __construct( Wiki $wiki, string $msgTitle ) {
25
		$this->wiki = $wiki;
26
		$this->msgTitle = $msgTitle;
27
	}
28
29
	/**
30
	 * @throws MessagesPageDoesNotExistException
31
	 */
32
	private function grabWikiMessages(): void {
33
		if ( self::$messages !== null ) {
34
			return;
35
		}
36
		try {
37
			$cont = $this->wiki->getPageContent( $this->msgTitle );
38
			self::$messages = json_decode( $cont, true );
39
		} catch ( MissingPageException $_ ) {
40
			throw new MessagesPageDoesNotExistException( 'Please create a messages page.' );
41
		}
42
	}
43
44
	/**
45
	 * @param string $key
46
	 * @return Message
47
	 * @throws MessageNotFoundException
48
	 */
49
	public function getMessage( string $key ): Message {
50
		$this->grabWikiMessages();
51
		if ( !isset( self::$messages[ $key ] ) ) {
52
			throw new MessageNotFoundException( "Message '$key' does not exist." );
53
		}
54
		// @phan-suppress-next-line PhanTypeArraySuspiciousNullable
55
		return new Message( self::$messages[$key] );
56
	}
57
}
58