FactoryPhoto   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 62
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 18
c 1
b 0
f 0
dl 0
loc 62
rs 10
wmc 7

5 Methods

Rating   Name   Duplication   Size   Complexity  
A createPhoto() 0 7 1
A create() 0 9 1
A checkData() 0 3 1
A validateString() 0 6 2
A validateUrl() 0 6 2
1
<?php declare(strict_types=1);
2
3
namespace One;
4
5
use One\Model\Photo;
6
7
/**
8
 * FactoryPhoto Class
9
 *
10
 * @method create
11
 * @method createPhoto
12
 * @method validateUrl
13
 * @method validateString
14
 * @method checkData
15
 */
16
class FactoryPhoto
17
{
18
    /**
19
     * function Create Photo Attachment
20
     */
21
    public static function create(array $data): \One\Model\Photo
22
    {
23
        $url = self::validateUrl((string) self::checkData($data, 'url', ''));
24
        $ratio = self::validateString((string) self::checkData($data, 'ratio', ''));
25
        $description = self::validateString((string) self::checkData($data, 'description', ''));
26
27
        $information = self::validateString((string) self::checkData($data, 'information', ''));
28
29
        return self::createPhoto($url, $ratio, $description, $information);
30
    }
31
32
    /**
33
     * Make Sure Url in string with correct url format
34
     * @throws \Exception
35
     */
36
    private static function validateUrl(string $url): string
37
    {
38
        if (filter_var($url, FILTER_VALIDATE_URL) === false) {
39
            throw new \Exception("Invalid url : ${url}");
40
        }
41
        return $url;
42
    }
43
44
    /**
45
     * functionality to check whether a variable is set or not
46
     * @param array<mixed> $data
47
     * @param mixed $key
48
     * @param string $default
49
     */
50
    private static function checkData(array $data, $key, $default = ''): string
51
    {
52
        return $data[$key] ?? $default;
53
    }
54
55
    /**
56
     * functionality validity for string variables
57
     * @param mixed $var
58
     * @throws \Exception
59
     */
60
    private static function validateString($var): string
61
    {
62
        if (gettype($var) === 'string') {
63
            return $var;
64
        }
65
        throw new \Exception('The variable type must String :' . $var);
66
    }
67
68
    /**
69
     * Create Photo Object
70
     */
71
    private static function createPhoto(string $url, string $ratio, string $description, string $information): \One\Model\Photo
72
    {
73
        return new Photo(
74
            $url,
75
            $ratio,
76
            $description,
77
            $information
78
        );
79
    }
80
}
81