Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
94.44% covered (success)
94.44%
17 / 18
66.67% covered (warning)
66.67%
2 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
FulltextHandler
94.44% covered (success)
94.44%
17 / 18
66.67% covered (warning)
66.67%
2 / 3
6.01
0.00% covered (danger)
0.00%
0 / 1
 apply
83.33% covered (warning)
83.33%
5 / 6
0.00% covered (danger)
0.00%
0 / 1
4.07
 supports
100.00% covered (success)
100.00%
11 / 11
100.00% covered (success)
100.00%
1 / 1
1
 properties
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4
5namespace Cosray\Field\Schema;
6
7use Cosray\Exception\RuntimeException;
8use Cosray\Field;
9use Cosray\Field\Capability\Searchable;
10use Cosray\Schema\Fulltext;
11use Override;
12
13class FulltextHandler extends Handler
14{
15    #[Override]
16    public function apply(object $meta, Field\Field $field): void
17    {
18        assert($meta instanceof Fulltext, 'The registry maps #[Fulltext] to this handler');
19
20        if ($field instanceof Searchable && self::supports($field::class)) {
21            $field->fulltext($meta->fulltextWeight);
22
23            return;
24        }
25
26        if ($meta->fulltextWeight === false) {
27            return;
28        }
29
30        throw new RuntimeException("Fulltext does not support field '{$field->name}' of type '{$field->type}'.");
31    }
32
33    public static function supports(string $type): bool
34    {
35        // Text subclasses include code and embed markup, not just prose.
36        return in_array(
37            $type,
38            [
39                Field\Text::class,
40                Field\Textarea::class,
41                Field\RichText::class,
42                Field\Blocks::class,
43                Field\Entries::class,
44            ],
45            true,
46        );
47    }
48
49    #[Override]
50    public function properties(object $meta, Field\Field $field): array
51    {
52        return [];
53    }
54}