Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
11 / 11
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
1 / 1
HtmlContainer
100.00% covered (success)
100.00%
11 / 11
100.00% covered (success)
100.00%
3 / 3
3
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
1 / 1
1
 has
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 get
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3/**
4 * @author: Doug Wilbourne (dougwilbourne@gmail.com)
5 */
6
7declare(strict_types=1);
8
9namespace pvc\html\factory;
10
11use League\Container\Container;
12use League\Container\Definition\Definition;
13use League\Container\Definition\DefinitionAggregate;
14use League\Container\ReflectionContainer;
15use Psr\Container\ContainerExceptionInterface;
16use Psr\Container\ContainerInterface;
17use Psr\Container\NotFoundExceptionInterface;
18use pvc\frmtr\msg\MsgFrmtr;
19use pvc\html\content_model\ContentModelNothing;
20use pvc\interfaces\struct\tree\node\TreenodeInterface;
21
22/**
23 * Class HtmlContainer
24 */
25class HtmlContainer implements ContainerInterface
26{
27    /**
28     * @var Container
29     */
30    protected Container $leagueContainer;
31
32    protected string $definitionsFile = __DIR__ . '/' . 'LeagueDefinitions.php';
33
34    public function __construct(?string $leagueDefinitionFile = null)
35    {
36        /** @var array<Definition> $defs */
37        $defs = include($leagueDefinitionFile ?? $this->definitionsFile);
38        $aggregate = new DefinitionAggregate($defs);
39        $this->leagueContainer = new Container($aggregate);
40
41        /**
42         * in addition to being able to make Elements (and their component objects),
43         * the container also needs to be able to make a DomNode of type text
44         */
45        $textNodeDef = (new Definition('pvc\html\text_node\TextElement'))
46            ->addArgument(MsgFrmtr::class);
47        $this->leagueContainer->add($textNodeDef->getAlias(), $textNodeDef);
48
49
50        /**
51         * add the html factory definition
52         */
53        $this->leagueContainer->add(HtmlFactory::class)
54            ->addArgument(Container::class);
55
56        /**
57         * enable autowiring
58         */
59        $this->leagueContainer->delegate(new ReflectionContainer());
60
61    }
62
63    /**
64     * has
65     * @param string $id
66     * @return bool
67     */
68    public function has(string $id): bool
69    {
70        return $this->leagueContainer->has($id);
71    }
72
73    /**
74     * get
75     * @param string $id
76     * @return mixed
77     * @throws ContainerExceptionInterface
78     * @throws NotFoundExceptionInterface
79     */
80    public function get(string $id): mixed
81    {
82        return $this->leagueContainer->get($id);
83    }
84}