UrlGeneratorFactory   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 36
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 4
dl 0
loc 36
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A createForMedia() 0 22 3
A guardAgainstInvalidUrlGenerator() 0 10 3
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