Completed
Push — master ( eeb5e0...9f7a88 )
by Sam
04:08
created

Factory::factory()   C

Complexity

Conditions 8
Paths 13

Size

Total Lines 31
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 17
CRAP Score 8.4423

Importance

Changes 1
Bugs 0 Features 1
Metric Value
dl 0
loc 31
ccs 17
cts 21
cp 0.8095
rs 5.3846
c 1
b 0
f 1
cc 8
eloc 22
nc 13
nop 1
crap 8.4423
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