Completed
Push — master ( f61da2...430ae5 )
by Sam
03: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 16
CRAP Score 8.8638

Importance

Changes 6
Bugs 0 Features 5
Metric Value
c 6
b 0
f 5
dl 0
loc 31
ccs 16
cts 21
cp 0.7619
rs 5.3846
cc 8
eloc 22
nc 13
nop 1
crap 8.8638
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 2
	public static function factory($json)
31
	{
32 2
		$deserialized = json_decode($json);
33
34 2
		if (!isset($deserialized->type))
35 2
			throw new MalformedRequestException('Missing required parameter "type"');
36
37 1
		$type = $deserialized->type;
38
39
		// Not all requests have a payload
40 1
		if (isset($deserialized->payload))
41 1
			$payload = $deserialized->payload;
42
		else
43 1
			$payload = null;
44
45
		switch ($type)
46
		{
47 1
			case AbstractMessage::TYPE_POPULAR_CHANNELS_REQUEST:
48
				return new PopularChannelsRequest($payload);
49 1
			case AbstractMessage::TYPE_MOST_ACTIVE_WATCHERS_REQUEST:
50
				return new MostActiveWatchersRequest($payload);
51 1
			case AbstractMessage::TYPE_AUTHENTICATION_REQUEST:
52
				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