Factory::factory()   B
last analyzed

Complexity

Conditions 8
Paths 13

Size

Total Lines 29
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 16
CRAP Score 8.512

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 8
eloc 21
c 1
b 0
f 1
nc 13
nop 1
dl 0
loc 29
rs 8.4444
ccs 16
cts 20
cp 0.8
crap 8.512
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