Completed
Push — master ( f61da2...430ae5 )
by Sam
03:08
created

Factory   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 52
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 7

Test Coverage

Coverage 69.57%

Importance

Changes 7
Bugs 0 Features 6
Metric Value
wmc 9
c 7
b 0
f 6
lcom 0
cbo 7
dl 0
loc 52
ccs 16
cts 23
cp 0.6957
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
C factory() 0 31 8
A __construct() 0 4 1
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