guardAgainstInvalidUrlGenerator()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 10
rs 9.9332
c 0
b 0
f 0
cc 3
nc 3
nop 1
1
<?php
2
3
namespace Spatie\MediaLibrary\UrlGenerator;
4
5
use Spatie\MediaLibrary\Conversion\ConversionCollection;
6
use Spatie\MediaLibrary\Exceptions\InvalidUrlGenerator;
7
use Spatie\MediaLibrary\Models\Media;
8
use Spatie\MediaLibrary\PathGenerator\PathGeneratorFactory;
9
10
class UrlGeneratorFactory
11
{
12
    public static function createForMedia(Media $media, string $conversionName = ''): UrlGenerator
13
    {
14
        $urlGeneratorClass = config('medialibrary.url_generator')
15
            ?: 'Spatie\MediaLibrary\UrlGenerator\\'.ucfirst($media->getDiskDriverName()).'UrlGenerator';
16
17
        static::guardAgainstInvalidUrlGenerator($urlGeneratorClass);
18
19
        $urlGenerator = app($urlGeneratorClass);
20
        $pathGenerator = PathGeneratorFactory::create();
21
22
        $urlGenerator
23
            ->setMedia($media)
24
            ->setPathGenerator($pathGenerator);
25
26
        if ($conversionName !== '') {
27
            $conversion = ConversionCollection::createForMedia($media)->getByName($conversionName);
28
29
            $urlGenerator->setConversion($conversion);
30
        }
31
32
        return $urlGenerator;
33
    }
34
35
    public static function guardAgainstInvalidUrlGenerator(string $urlGeneratorClass)
36
    {
37
        if (! class_exists($urlGeneratorClass)) {
38
            throw InvalidUrlGenerator::doesntExist($urlGeneratorClass);
39
        }
40
41
        if (! is_subclass_of($urlGeneratorClass, UrlGenerator::class)) {
0 ignored issues
show
Bug introduced by
Due to PHP Bug #53727, is_subclass_of might return inconsistent results on some PHP versions if \Spatie\MediaLibrary\Url...tor\UrlGenerator::class can be an interface. If so, you could instead use ReflectionClass::implementsInterface.
Loading history...
42
            throw InvalidUrlGenerator::isntAUrlGenerator($urlGeneratorClass);
43
        }
44
    }
45
}
46