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