Passed
Push — master ( e8effc...d6f260 )
by Alan
04:52
created

MercureSubscriptionIriGenerator::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
c 1
b 0
f 0
nc 1
nop 2
dl 0
loc 4
rs 10
1
<?php
2
3
/*
4
 * This file is part of the API Platform project.
5
 *
6
 * (c) Kévin Dunglas <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
declare(strict_types=1);
13
14
namespace ApiPlatform\Core\GraphQl\Subscription;
15
16
use Symfony\Component\Routing\RequestContext;
17
18
/**
19
 * Generates Mercure-related IRIs from a subscription ID.
20
 *
21
 * @experimental
22
 *
23
 * @author Alan Poulain <[email protected]>
24
 */
25
final class MercureSubscriptionIriGenerator implements MercureSubscriptionIriGeneratorInterface
26
{
27
    private $requestContext;
28
    private $hub;
29
30
    public function __construct(RequestContext $requestContext, string $hub)
31
    {
32
        $this->requestContext = $requestContext;
33
        $this->hub = $hub;
34
    }
35
36
    public function generateTopicIri(string $subscriptionId): string
37
    {
38
        if ('' === $scheme = $this->requestContext->getScheme()) {
39
            $scheme = 'https';
40
        }
41
        if ('' === $host = $this->requestContext->getHost()) {
42
            $host = 'api-platform.com';
43
        }
44
45
        return "$scheme://$host/subscriptions/$subscriptionId";
46
    }
47
48
    public function generateMercureUrl(string $subscriptionId): string
49
    {
50
        return $this->hub.'?topic='.$this->generateTopicIri($subscriptionId);
51
    }
52
}
53