Passed
Branch 3.0.0 (98e096)
by Pieter
02:47
created

ChainableFactory   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 65
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 19
c 1
b 0
f 0
dl 0
loc 65
rs 10
wmc 13

5 Methods

Rating   Name   Duplication   Size   Complexity  
A hasApiResourceRetrieverInstance() 0 8 3
A getApiResourcePersisterInstance() 0 8 3
A __construct() 0 3 1
A getApiResourceRetrieverInstance() 0 8 3
A hasApiResourcePersisterInstance() 0 8 3
1
<?php
2
3
4
namespace W2w\Lib\Apie\ResourceFactories;
5
6
use W2w\Lib\Apie\Exceptions\CouldNotConstructApiResourceClassException;
7
use W2w\Lib\Apie\Persisters\ApiResourcePersisterInterface;
8
use W2w\Lib\Apie\Retrievers\ApiResourceRetrieverInterface;
9
10
class ChainableFactory implements ApiResourceFactoryInterface
11
{
12
    /**
13
     * @var ApiResourceFactoryInterface[]
14
     */
15
    private $factories;
16
17
    /**
18
     * ApiResourceFactoryInterface[]
19
     */
20
    public function __construct(array $factories)
21
    {
22
        $this->factories = $factories;
23
    }
24
25
    /**
26
     * {@inheritDoc}
27
     */
28
    public function hasApiResourceRetrieverInstance(string $identifier): bool
29
    {
30
        foreach ($this->factories as $factory) {
31
            if ($factory->hasApiResourceRetrieverInstance($identifier)) {
32
                return true;
33
            }
34
        }
35
        return false;
36
    }
37
38
    /**
39
     * {@inheritDoc}
40
     */
41
    public function getApiResourceRetrieverInstance(string $identifier): ApiResourceRetrieverInterface
42
    {
43
        foreach ($this->factories as $factory) {
44
            if ($factory->hasApiResourceRetrieverInstance($identifier)) {
45
                return $factory->getApiResourceRetrieverInstance();
0 ignored issues
show
Bug introduced by
The call to W2w\Lib\Apie\ResourceFac...urceRetrieverInstance() has too few arguments starting with identifier. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

45
                return $factory->/** @scrutinizer ignore-call */ getApiResourceRetrieverInstance();

This check compares calls to functions or methods with their respective definitions. If the call has less arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. Please note the @ignore annotation hint above.

Loading history...
46
            }
47
        }
48
        throw new CouldNotConstructApiResourceClassException($identifier);
49
    }
50
51
    /**
52
     * {@inheritDoc}
53
     */
54
    public function hasApiResourcePersisterInstance(string $identifier): bool
55
    {
56
        foreach ($this->factories as $factory) {
57
            if ($factory->hasApiResourcePersisterInstance($identifier)) {
58
                return true;
59
            }
60
        }
61
        return false;
62
    }
63
64
    /**
65
     * {@inheritDoc}
66
     */
67
    public function getApiResourcePersisterInstance(string $identifier): ApiResourcePersisterInterface
68
    {
69
        foreach ($this->factories as $factory) {
70
            if ($factory->hasApiResourcePersisterInstance($identifier)) {
71
                return $factory->getApiResourcePersisterInstance();
0 ignored issues
show
Bug introduced by
The call to W2w\Lib\Apie\ResourceFac...urcePersisterInstance() has too few arguments starting with identifier. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

71
                return $factory->/** @scrutinizer ignore-call */ getApiResourcePersisterInstance();

This check compares calls to functions or methods with their respective definitions. If the call has less arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. Please note the @ignore annotation hint above.

Loading history...
72
            }
73
        }
74
        throw new CouldNotConstructApiResourceClassException($identifier);
75
    }
76
}
77