ObjectMapper   A
last analyzed

Complexity

Total Complexity 11

Size/Duplication

Total Lines 105
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Test Coverage

Coverage 0%

Importance

Changes 2
Bugs 0 Features 2
Metric Value
wmc 11
c 2
b 0
f 2
lcom 1
cbo 0
dl 0
loc 105
ccs 0
cts 28
cp 0
rs 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
A setTokenClass() 0 6 1
A getTokenClass() 0 4 1
A setImageClass() 0 7 1
A getImageClass() 0 4 1
A setAlbumClass() 0 7 1
A getAlbumClass() 0 4 1
B checkClass() 0 17 5
1
<?php
2
3
namespace Mechpave\ImgurClient\Mapper;
4
5
use Mechpave\ImgurClient\Model\EntityClassModel;
6
7
/**
8
 * Class ObjectMapper
9
 * @package Mechpave\ImgurClient\Mapper
10
 */
11
class ObjectMapper
12
{
13
    /**
14
     * Token entity class
15
     * @var string
16
     */
17
    protected $tokenClass = EntityClassModel::TOKEN;
18
19
    /**
20
     * Image entity class
21
     * @var string
22
     */
23
    protected $imageClass = EntityClassModel::IMAGE;
24
25
    /**
26
     * Album entity class
27
     * @var string
28
     */
29
    protected $albumClass = EntityClassModel::ALBUM;
30
31
    /**
32
     * @param $tokenClass
33
     * @throws \InvalidArgumentException
34
     * @return ObjectMapper
35
     */
36
    public function setTokenClass($tokenClass) {
37
        $this->checkClass($tokenClass, 'Mechpave\ImgurClient\Entity\TokenInterface');
38
        $this->tokenClass = $tokenClass;
39
40
        return $this;
41
    }
42
43
    /**
44
     * @return string
45
     */
46
    public function getTokenClass()
47
    {
48
        return $this->tokenClass;
49
    }
50
51
    /**
52
     * @param string $imageClass
53
     * @throws \InvalidArgumentException
54
     * @return ObjectMapper
55
     */
56
    public function setImageClass($imageClass)
57
    {
58
        $this->checkClass($imageClass, 'Mechpave\ImgurClient\Entity\ImageInterface');
59
        $this->imageClass = $imageClass;
60
61
        return $this;
62
    }
63
64
    /**
65
     * @return string
66
     */
67
    public function getImageClass()
68
    {
69
        return $this->imageClass;
70
    }
71
72
    /**
73
     * @param string $albumClass
74
     * @return $this
75
     */
76
    public function setAlbumClass($albumClass)
77
    {
78
        $this->checkClass($albumClass, 'Mechpave\ImgurClient\Entity\AlbumInterface');
79
        $this->albumClass = $albumClass;
80
81
        return $this;
82
    }
83
84
    /**
85
     * @return string
86
     */
87
    public function getAlbumClass()
88
    {
89
        return $this->albumClass;
90
    }
91
92
    /**
93
     * Checks if $fqn is an instantiable class and implements necessary interface
94
     * @param string $fqn
95
     * @param $interface
96
     * @throws \InvalidArgumentException
97
     */
98
    protected function checkClass($fqn, $interface)
99
    {
100
        if (!class_exists($fqn)) {
101
            throw new \InvalidArgumentException($fqn . ' class does not exist');
102
        }
103
104
        $reflectionClass = new \ReflectionClass($fqn);
105
106
        if (!$reflectionClass->isInstantiable()) {
107
            throw new \InvalidArgumentException($fqn . ' must be FQN to an instantiable class');
108
        }
109
110
        $interfaces = class_implements($fqn);
111
        if($interfaces && !in_array($interface, $interfaces)) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $interfaces of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
112
            throw new \InvalidArgumentException($fqn . 'must implement ' . $interface);
113
        }
114
    }
115
}