Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
26 / 26
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
1 / 1
Registry
100.00% covered (success)
100.00%
26 / 26
100.00% covered (success)
100.00%
3 / 3
3
100.00% covered (success)
100.00%
1 / 1
 register
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getHandler
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 withDefaults
100.00% covered (success)
100.00%
24 / 24
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4
5namespace Cosray\Field\Schema;
6
7use Cosray\Schema\Allows;
8use Cosray\Schema\Columns;
9use Cosray\Schema\Common;
10use Cosray\Schema\DefaultValue;
11use Cosray\Schema\Description;
12use Cosray\Schema\Fulltext;
13use Cosray\Schema\Hidden;
14use Cosray\Schema\Icon;
15use Cosray\Schema\Immutable;
16use Cosray\Schema\Label;
17use Cosray\Schema\Limit;
18use Cosray\Schema\Lines;
19use Cosray\Schema\Options;
20use Cosray\Schema\Placeholder;
21use Cosray\Schema\Required;
22use Cosray\Schema\Rowspan;
23use Cosray\Schema\Syntax;
24use Cosray\Schema\Tools;
25use Cosray\Schema\Translate;
26use Cosray\Schema\Validate;
27use Cosray\Schema\When;
28use Cosray\Schema\Width;
29
30class Registry
31{
32    /** @var array<class-string, Handler> */
33    private array $handlers = [];
34
35    /** @param class-string $schema */
36    public function register(string $schema, Handler $handler): void
37    {
38        $this->handlers[$schema] = $handler;
39    }
40
41    public function getHandler(object $schema): ?Handler
42    {
43        return $this->handlers[$schema::class] ?? null;
44    }
45
46    public static function withDefaults(): self
47    {
48        $registry = new self();
49        $registry->register(Allows::class, new AllowsHandler());
50        $registry->register(Common::class, new CommonHandler());
51        $registry->register(Label::class, new LabelHandler());
52        $registry->register(Icon::class, new IconHandler());
53        $registry->register(Description::class, new DescriptionHandler());
54        $registry->register(Placeholder::class, new PlaceholderHandler());
55        $registry->register(Translate::class, new TranslateHandler());
56        $registry->register(Required::class, new RequiredHandler());
57        $registry->register(Validate::class, new ValidateHandler());
58        $registry->register(DefaultValue::class, new DefaultValueHandler());
59        $registry->register(Width::class, new WidthHandler());
60        $registry->register(Rowspan::class, new RowspanHandler());
61        $registry->register(Lines::class, new LinesHandler());
62        $registry->register(Columns::class, new ColumnsHandler());
63        $registry->register(Hidden::class, new HiddenHandler());
64        $registry->register(Immutable::class, new ImmutableHandler());
65        $registry->register(Options::class, new OptionsHandler());
66        $registry->register(Limit::class, new LimitHandler());
67        $registry->register(Fulltext::class, new FulltextHandler());
68        $registry->register(Syntax::class, new SyntaxHandler());
69        $registry->register(Tools::class, new ToolsHandler());
70        $registry->register(When::class, new WhenHandler());
71
72        return $registry;
73    }
74}