Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
60.00% covered (warning)
60.00%
6 / 10
55.56% covered (warning)
55.56%
5 / 9
CRAP
0.00% covered (danger)
0.00%
0 / 1
DependenciesCollection
60.00% covered (warning)
60.00%
6 / 10
55.56% covered (warning)
55.56%
5 / 9
16.40
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
2
 toArray
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getIterator
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 offsetExists
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 offsetGet
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 offsetSet
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 offsetUnset
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 count
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 add
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2/**
3 * A collection of `ComposerPackage`.
4 */
5
6namespace BrianHenryIE\Strauss\Composer;
7
8use ArrayAccess;
9use ArrayIterator;
10use Countable;
11use IteratorAggregate;
12
13/**
14 * @implements IteratorAggregate<string, ComposerPackage>
15 * @implements ArrayAccess<string, ComposerPackage>
16 */
17class DependenciesCollection implements IteratorAggregate, ArrayAccess, Countable
18{
19
20    /**
21     * @var array<string,ComposerPackage>
22     */
23    protected array $dependencies = [];
24
25    /**
26     * @param array<ComposerPackage> $dependencies
27     */
28    public function __construct(
29        array $dependencies
30    ) {
31        foreach ($dependencies as $dependency) {
32            $this->dependencies[$dependency->getPackageName()] = $dependency;
33        }
34    }
35
36    /**
37     * @return array<string,ComposerPackage>
38     */
39    public function toArray()
40    {
41        return $this->dependencies;
42    }
43
44    #[\ReturnTypeWillChange]
45    public function getIterator()
46    {
47        return new ArrayIterator($this->dependencies);
48    }
49
50    /**
51     * @return bool
52     */
53    #[\ReturnTypeWillChange]
54    public function offsetExists($offset)
55    {
56        return (bool) $this->offsetGet($offset);
57    }
58
59    /**
60     * @return ?ComposerPackage
61     */
62    #[\ReturnTypeWillChange]
63    public function offsetGet($offset)
64    {
65        return $this->dependencies[$offset] ?? null;
66    }
67
68    #[\ReturnTypeWillChange]
69    public function offsetSet($offset, $value)
70    {
71        throw new \BadMethodCallException();
72    }
73
74    #[\ReturnTypeWillChange]
75    public function offsetUnset($offset)
76    {
77        throw new \BadMethodCallException();
78    }
79
80    /**
81     * TODO: direct dependencies or complete dependency tree?
82     *
83     * @return int
84     */
85    #[\ReturnTypeWillChange]
86    public function count()
87    {
88        return count($this->dependencies);
89    }
90
91    public function add(ComposerPackage $package): void
92    {
93        $this->dependencies[$package->getPackageName()] = $package;
94    }
95}