Completed
Push — master ( 7f96cd...27908d )
by Freek
09:27
created

UrlGeneratorFactory::isAValidUrlGeneratorClass()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 16
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 16
rs 9.2
c 1
b 0
f 0
cc 4
eloc 8
nc 4
nop 1
1
<?php
2
3
namespace Spatie\MediaLibrary\UrlGenerator;
4
5
use Spatie\MediaLibrary\Exceptions\InvalidUrlGenerator;
6
use Spatie\MediaLibrary\Media;
7
use Spatie\MediaLibrary\PathGenerator\PathGeneratorFactory;
8
9
class UrlGeneratorFactory
10
{
11
    public static function createForMedia(Media $media) : UrlGenerator
12
    {
13
        $urlGeneratorClass = config('laravel-medialibrary.custom_url_generator_class')
14
            ?: 'Spatie\MediaLibrary\UrlGenerator\\'.ucfirst($media->getDiskDriverName()).'UrlGenerator';
15
16
        static::guardAgainstInvalidUrlGenerator($urlGeneratorClass);
17
18
        $urlGenerator = app($urlGeneratorClass);
19
        $pathGenerator = PathGeneratorFactory::create();
20
21
        $urlGenerator->setMedia($media)->setPathGenerator($pathGenerator);
22
23
        return $urlGenerator;
24
    }
25
26
    public static function guardAgainstInvalidUrlGenerator(string $urlGeneratorClass)
27
    {
28
        if (!class_exists($urlGeneratorClass)) {
29
            throw InvalidUrlGenerator::doesntExist($urlGeneratorClass);
30
        }
31
32
        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...
33
            throw InvalidUrlGenerator::isntAUrlGenerator($urlGeneratorClass);
34
        }
35
    }
36
}
37