MessageDefinitionFactory::create()   A
last analyzed

Complexity

Conditions 4
Paths 5

Size

Total Lines 32

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 16
CRAP Score 4

Importance

Changes 0
Metric Value
dl 0
loc 32
ccs 16
cts 16
cp 1
rs 9.408
c 0
b 0
f 0
cc 4
nc 5
nop 5
crap 4
1
<?php
2
3
namespace Yokai\MessengerBundle\DependencyInjection\Factory;
4
5
use LogicException;
6
use Symfony\Component\DependencyInjection\ContainerBuilder;
7
use Symfony\Component\DependencyInjection\Definition;
8
use Yokai\MessengerBundle\Message;
9
10
/**
11
 * @author Yann Eugoné <[email protected]>
12
 */
13
class MessageDefinitionFactory
14
{
15
    /**
16
     * @param ContainerBuilder $container
17
     * @param string           $id
18
     * @param array            $channels
19
     * @param array            $defaults
20
     * @param array            $options
21
     */
22 4
    public static function create(
23
        ContainerBuilder $container,
24
        $id,
25
        array $channels,
26
        array $defaults = [],
27
        array $options = []
28
    ) {
29 4
        $messageId = sprintf('yokai_messenger.message.%s', $id);
30
31 4
        if ($container->hasDefinition($messageId)) {
32 1
            throw new LogicException(
33 1
                sprintf(
34 1
                    'The message with id "%s" was already registered (a service with id "%s" already exists)',
35 1
                    $id,
36 1
                    $messageId
37
                )
38
            );
39
        }
40
41 4
        $messageDefinition = new Definition(Message::class, [$id, $defaults]);
42 4
        $messageDefinition->setPublic(false);
43
44 4
        foreach ($channels as $channel) {
45 4
            $messageDefinition->addTag('yokai_messenger.message', ['channel' => $channel]);
46
        }
47
48 4
        foreach ($options as $channel => $channelOptions) {
49 1
            $messageDefinition->addMethodCall('setOptions', [$channel, $channelOptions]);
50
        }
51
52 4
        $container->setDefinition($messageId, $messageDefinition);
53 4
    }
54
}
55