Factory   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 48
Duplicated Lines 0 %

Test Coverage

Coverage 77.27%

Importance

Changes 2
Bugs 0 Features 2
Metric Value
eloc 22
c 2
b 0
f 2
dl 0
loc 48
rs 10
ccs 17
cts 22
cp 0.7727
wmc 9

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 2 1
B factory() 0 29 8
1
<?php
2
3
namespace Jalle19\StatusManager\Message;
4
5
use Jalle19\StatusManager\Exception\MalformedRequestException;
6
use Jalle19\StatusManager\Exception\UnknownRequestException;
7
use Jalle19\StatusManager\Message\Request\AuthenticationRequest;
8
use Jalle19\StatusManager\Message\Request\InstancesRequest;
9
use Jalle19\StatusManager\Message\Request\MostActiveWatchersRequest;
10
use Jalle19\StatusManager\Message\Request\PopularChannelsRequest;
11
use Jalle19\StatusManager\Message\Request\UsersRequest;
12
13
/**
14
 * Factory for turning raw client messages into respective message objects.
15
 *
16
 * @package   Jalle19\StatusManager\Message
17
 * @copyright Copyright &copy; Sam Stenvall 2016-
18
 * @license   https://www.gnu.org/licenses/gpl.html The GNU General Public License v2.0
19
 */
20
class Factory
21
{
22
23
	/**
24
	 * @param string $json
25
	 *
26
	 * @return AbstractMessage
27
	 * @throws UnknownRequestException
28
	 * @throws MalformedRequestException
29
	 */
30 3
	public static function factory($json)
31
	{
32 3
		$deserialized = json_decode($json);
33
34 3
		if (!isset($deserialized->type))
35 3
			throw new MalformedRequestException('Missing required parameter "type"');
36
37 2
		$type = $deserialized->type;
38
39
		// Not all requests have a payload
40 2
		if (isset($deserialized->payload))
41 2
			$payload = $deserialized->payload;
42
		else
43 1
			$payload = null;
44
45
		switch ($type)
46
		{
47 2
			case AbstractMessage::TYPE_POPULAR_CHANNELS_REQUEST:
48
				return new PopularChannelsRequest($payload);
49 2
			case AbstractMessage::TYPE_MOST_ACTIVE_WATCHERS_REQUEST:
50
				return new MostActiveWatchersRequest($payload);
51 2
			case AbstractMessage::TYPE_AUTHENTICATION_REQUEST:
52 1
				return new AuthenticationRequest($payload);
53 1
			case AbstractMessage::TYPE_INSTANCES_REQUEST:
54
				return new InstancesRequest();
55 1
			case AbstractMessage::TYPE_USERS_REQUEST:
56
				return new UsersRequest($payload);
57 1
			default:
58 1
				throw new UnknownRequestException($type);
59 1
		}
60
	}
61
62
63
	/**
64
	 * Don't allow instantiation
65
	 */
66
	private function __construct()
67
	{
68
69
	}
70
71
}
72