Completed
Push — master ( f55883...4285c1 )
by Thomas Mauro
13:12 queued 10:06
created

AMQP   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 85
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 10
c 1
b 0
f 0
lcom 1
cbo 2
dl 0
loc 85
ccs 23
cts 23
cp 1
rs 10

6 Methods

Rating   Name   Duplication   Size   Complexity  
A getConnection() 0 4 1
A createChannelResource() 0 4 1
A __construct() 0 8 3
A registerConnection() 0 4 1
A registerChannel() 0 4 1
A createChannel() 0 17 3
1
<?php
2
3
namespace AMQPAL\Adapter\AMQP;
4
5
use AMQPAL\Adapter\AMQP\Options\ConnectionOptions;
6
use AMQPAL\Adapter\AdapterInterface;
7
use AMQPAL\Adapter\Exception;
8
9
/**
10
 * Class AMQP
11
 *
12
 * @package AMQPAL\Adapter\AMQP
13
 */
14
class AMQP implements AdapterInterface
15
{
16
    /**
17
     * @var Connection
18
     */
19
    protected $connection;
20
    /**
21
     * @var Channel
22
     */
23
    protected $channelPrototype;
24
25
    /**
26
     * AMQP constructor.
27
     *
28
     * @param Connection|ConnectionOptions|array|\Traversable|\AMQPConnection $connection
29
     * @param Channel    $channelPrototype
30
     * @throws Exception\InvalidArgumentException
31
     * @throws Exception\BadMethodCallException
32
     */
33 4
    public function __construct($connection, Channel $channelPrototype = null)
34
    {
35 4
        if (!$connection instanceof Connection) {
36 1
            $connection = new Connection($connection);
0 ignored issues
show
Bug introduced by
It seems like $connection defined by new \AMQPAL\Adapter\AMQP\Connection($connection) on line 36 can also be of type array or object<Traversable>; however, AMQPAL\Adapter\AMQP\Connection::__construct() does only seem to accept object<AMQPConnection>|o...ions\ConnectionOptions>, maybe add an additional type check?

If a method or function can return multiple different values and unless you are sure that you only can receive a single value in this context, we recommend to add an additional type check:

/**
 * @return array|string
 */
function returnsDifferentValues($x) {
    if ($x) {
        return 'foo';
    }

    return array();
}

$x = returnsDifferentValues($y);
if (is_array($x)) {
    // $x is an array.
}

If this a common case that PHP Analyzer should handle natively, please let us know by opening an issue.

Loading history...
37
        }
38 4
        $this->registerConnection($connection);
39 4
        $this->registerChannel($channelPrototype ?: new Channel());
40 4
    }
41
42
    /**
43
     * @param Connection $connection
44
     */
45 4
    public function registerConnection(Connection $connection)
46
    {
47 4
        $this->connection = $connection;
48 4
    }
49
50
    /**
51
     * @param Channel $channel
52
     */
53 4
    public function registerChannel(Channel $channel)
54
    {
55 4
        $this->channelPrototype = $channel;
56 4
    }
57
58
    /**
59
     * @return Connection
60
     */
61 4
    public function getConnection()
62
    {
63 4
        return $this->connection;
64
    }
65
66
    /**
67
     * @param \AMQPChannel $resource
68
     * @return Channel
69
     * @throws \AMQPConnectionException
70
     */
71 3
    public function createChannel($resource = null)
72
    {
73 3
        $channel = clone $this->channelPrototype;
74
75 3
        $channel->setConnection($this->getConnection());
76
77 3
        if ($resource instanceof \AMQPChannel) {
78 1
            $channel->setResource($resource);
79
        } else {
80 2
            if (!$this->getConnection()->isConnected()) {
81 1
                $this->getConnection()->connect();
82
            }
83 2
            $channel->setResource($this->createChannelResource());
84
        }
85
86 3
        return $channel;
87
    }
88
89
    /**
90
     * @return \AMQPChannel
91
     * @throws \AMQPConnectionException
92
     * @codeCoverageIgnore
93
     */
94
    protected function createChannelResource()
95
    {
96
        return new \AMQPChannel($this->connection->getResource());
97
    }
98
}
99