Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
87.50% covered (warning)
87.50%
7 / 8
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
1 / 1
DynamicDataProviderRegistry
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
3 / 3
6
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
2
 register
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 findProvider
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
3
1<?php
2
3declare(strict_types=1);
4
5/** @license For full copyright and license information, please see the LICENSE.md file. */
6
7namespace App\Core\Engine\Domain\DataSource;
8
9defined('AMMONLY_APP') || exit('Direct script access is forbidden.');
10
11/**
12 * Dynamic Data Provider Registry.
13 *
14 * Catalog and lookup registry for all registered DynamicDataProviderInterface instances.
15 *
16 * @package App\Core\Engine\Domain\DataSource
17 */
18final class DynamicDataProviderRegistry
19{
20    /**
21     * @var array<int, DynamicDataProviderInterface>
22     */
23    private array $providers = [];
24
25    /**
26     * DynamicDataProviderRegistry constructor.
27     *
28     * @param iterable<DynamicDataProviderInterface> $providers Initial provider list.
29     */
30    public function __construct(iterable $providers = [])
31    {
32        foreach ($providers as $provider) {
33            $this->register($provider);
34        }
35    }
36
37    /**
38     * Registers a new data provider.
39     *
40     * @param DynamicDataProviderInterface $provider Data provider instance.
41     * @return void
42     */
43    public function register(DynamicDataProviderInterface $provider): void
44    {
45        $this->providers[] = $provider;
46    }
47
48    /**
49     * Finds matching data provider for module name.
50     *
51     * @param string $moduleName Machine name of the module.
52     * @return DynamicDataProviderInterface|null Provider instance or null if none registered.
53     */
54    public function findProvider(string $moduleName): ?DynamicDataProviderInterface
55    {
56        foreach ($this->providers as $provider) {
57            if ($provider->supports($moduleName)) {
58                return $provider;
59            }
60        }
61
62        return null;
63    }
64}