StorageCollection   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 77
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 14
c 1
b 0
f 0
dl 0
loc 77
rs 10
wmc 8

6 Methods

Rating   Name   Duplication   Size   Complexity  
A all() 0 3 1
A has() 0 3 1
A delete() 0 4 1
A __construct() 0 4 2
A add() 0 4 1
A get() 0 5 2
1
<?php
2
3
/**
4
 * Platine Container
5
 *
6
 * Platine Container is the implementation of PSR 11
7
 *
8
 * This content is released under the MIT License (MIT)
9
 *
10
 * Copyright (c) 2020 Platine Container
11
 * Copyright (c) 2019 Dion Chaika
12
 *
13
 * Permission is hereby granted, free of charge, to any person obtaining a copy
14
 * of this software and associated documentation files (the "Software"), to deal
15
 * in the Software without restriction, including without limitation the rights
16
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17
 * copies of the Software, and to permit persons to whom the Software is
18
 * furnished to do so, subject to the following conditions:
19
 *
20
 * The above copyright notice and this permission notice shall be included in all
21
 * copies or substantial portions of the Software.
22
 *
23
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29
 * SOFTWARE.
30
 */
31
32
/**
33
 *  @file StorageCollection.php
34
 *
35
 *  This class represente the collection of container storages
36
 *
37
 *  @package    Platine\Container
38
 *  @author Platine Developers Team
39
 *  @copyright  Copyright (c) 2020
40
 *  @license    http://opensource.org/licenses/MIT  MIT License
41
 *  @link   https://www.platine-php.com
42
 *  @version 1.0.0
43
 *  @filesource
44
 */
45
46
declare(strict_types=1);
47
48
namespace Platine\Container;
49
50
/**
51
 * @class StorageCollection
52
 * @package Platine\Container
53
 */
54
class StorageCollection
55
{
56
    /**
57
     * The array of storage
58
     * @var array<string, StorageInterface>
59
     */
60
    protected array $storages = [];
61
62
    /**
63
     * The array of all of the container storage
64
     * @var StorageInterface[]
65
     */
66
    protected array $all = [];
67
68
    /**
69
     * Create new collection of storage
70
     *
71
     * @param StorageInterface[] $storages  the container storage
72
     */
73
    public function __construct(array $storages = [])
74
    {
75
        foreach ($storages as $storage) {
76
            $this->add($storage);
77
        }
78
    }
79
80
    /**
81
     * Add new storage to the collection
82
     * @param StorageInterface $storage
83
     */
84
    public function add(StorageInterface $storage): StorageInterface
85
    {
86
        $this->all[] = $storage;
87
        return $this->storages[$storage->getName()] = $storage;
88
    }
89
90
    /**
91
     * Return all array of container storage
92
     * @return StorageInterface[] the collection of storage
93
     */
94
    public function all(): array
95
    {
96
        return $this->all;
97
    }
98
99
    /**
100
     * Check whether the collection contains the storage for the
101
     * given name
102
     * @param  string  $name the name of the storage
103
     * @return boolean
104
     */
105
    public function has(string $name): bool
106
    {
107
        return array_key_exists($name, $this->storages);
108
    }
109
110
    /**
111
     * Get the container storage for the given name from the collection
112
     * @param  string  $name the name of the storage
113
     * @return StorageInterface|null
114
     */
115
    public function get(string $name): ?StorageInterface
116
    {
117
        return array_key_exists($name, $this->storages)
118
                ? $this->storages[$name]
119
                : null;
120
    }
121
122
    /**
123
     * Delete from collection the container storage for the given name
124
     * @param  string  $name the name of the storage
125
     * @return StorageCollection
126
     */
127
    public function delete(string $name): self
128
    {
129
        unset($this->storages[$name]);
130
        return $this;
131
    }
132
}
133