DelegateContainerTrait::delegateGet()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 3

Importance

Changes 0
Metric Value
dl 0
loc 10
ccs 6
cts 6
cp 1
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 5
nc 3
nop 1
crap 3
1
<?php
2
/*
3
* The MIT License (MIT)
4
* Copyright © 2017 Marcos Lois Bermudez <[email protected]>
5
* *
6
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
7
* documentation files (the “Software”), to deal in the Software without restriction, including without limitation
8
* the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
9
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
10
* *
11
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
12
* of the Software.
13
* *
14
* THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
15
* TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
16
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
17
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
18
* DEALINGS IN THE SOFTWARE.
19
*/
20
21
namespace TTIC\Interop\Container;
22
23
use Interop\Container\ContainerInterface;
24
use Interop\Container\Exception\NotFoundException;
25
use TTIC\Interop\Container\Exception\ContainerException;
26
27
/**
28
 * Utility trait to add delegate container feature.
29
 *
30
 * @package TTIC\Container
31
 * @author Marcos Lois Bermúdez <[email protected]>
32
 */
33
trait DelegateContainerTrait
34
{
35
    /**
36
     * @var ContainerInterface[]
37
     */
38
    protected $delegateContainers = [];
39
40
    /**
41
     * @param ContainerInterface $container
42
     */
43 3
    public function addDelegateContainer(ContainerInterface $container)
44
    {
45 3
        $this->delegateContainers[] = $container;
46 3
    }
47
48
    /**
49
     * @return ContainerInterface[]
50
     */
51 3
    public function getDelegateContainers()
52
    {
53 3
        return $this->delegateContainers;
54
    }
55
56
    /**
57
     * Check if any delegated containers has a entry.
58
     *
59
     * @param string $id Identifier of the entry to look for.
60
     *
61
     * @return bool TRUE if any delegated container has the key, FALSE otherwise.
62
     */
63 3
    protected function delegateHas($id)
64
    {
65 3
        foreach ($this->delegateContainers as $container) {
66 3
            if ($container->has($id)) {
67 3
                return true;
68
            }
69 1
        }
70
71 3
        return false;
72
    }
73
74
    /**
75
     * Finds an entry in the delegated container by its identifier and returns it.
76
     *
77
     * @param string $id Identifier of the entry to look for.
78
     *
79
     * @throws NotFoundException  No entry was found for this identifier.
80
     * @throws ContainerException Error while retrieving the entry.
81
     *
82
     * @return mixed Entry.
83
     */
84 6
    protected function delegateGet($id)
85
    {
86 6
        foreach ($this->delegateContainers as $container) {
87 3
            if ($container->has($id)) {
88 3
                return $container->get($id);
89
            }
90 1
        }
91
92 3
        throw ContainerException::fromPrevious($id, null);
93
    }
94
}
95