Code Coverage
 
Lines
Branches
Paths
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
8 / 8
60.00% covered (warning)
60.00%
3 / 5
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
DefaultRules
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
8 / 8
60.00% covered (warning)
60.00%
3 / 5
100.00% covered (success)
100.00%
2 / 2
5.02
100.00% covered (success)
100.00%
1 / 1
 get
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
2
 all
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
4 / 4
33.33% covered (danger)
33.33%
1 / 3
100.00% covered (success)
100.00%
1 / 1
3.19
1<?php
2
3declare(strict_types=1);
4
5namespace Celema\Sire;
6
7use Override;
8
9final class DefaultRules implements Contract\RuleRegistry
10{
11    private const array RULES = [
12        'required' => Rule\Required::class,
13        'email' => Rule\Email::class,
14        'minlen' => Rule\MinLength::class,
15        'maxlen' => Rule\MaxLength::class,
16        'min' => Rule\Minimum::class,
17        'max' => Rule\Maximum::class,
18        'regex' => Rule\Regex::class,
19        'in' => Rule\Allowed::class,
20    ];
21
22    /** @var array<string, Contract\Rule> */
23    private array $loaded = [];
24
25    #[Override]
26    public function get(string $name): ?Contract\Rule
27    {
28        $class = self::RULES[$name] ?? null;
29
30        return $class === null ? null : ($this->loaded[$name] ??= new $class());
31    }
32
33    #[Override]
34    public function all(): array
35    {
36        $rules = [];
37
38        foreach (self::RULES as $name => $class) {
39            $this->loaded[$name] ??= new $class();
40            $rules[$name] = $this->loaded[$name];
41        }
42
43        return $rules;
44    }
45}