Lines 0.00% 0 / 6
Functions and Methods 0.00% 0 / 3
Classes and Traits 0.00% 0 / 1
Name Lines Functions and Methods CRAP Classes and Traits
DayOfWeekCollection 0.00% 0 / 6 0.00% 0 / 3 20 0.00% 0 / 1
 fromDistinctDays 0.00% 0 / 4 0.00% 0 / 1 6
 containsDay 0.00% 0 / 1 0.00% 0 / 1 2
 listNames 0.00% 0 / 1 0.00% 0 / 1 2
1<?php
2
3declare(strict_types=1);
4
5namespace Stewart\Support\Schedule\Collection;
6
7use Stewart\Contracts\Collection\ListCollection;
8use Stewart\Contracts\Schedule\DayOfWeek;
9
10/**
11 * @internal
12 * @extends ListCollection<DayOfWeek>
13 */
14final readonly class DayOfWeekCollection extends ListCollection
15{
16    /** @param iterable<DayOfWeek> $days */
17    public static function fromDistinctDays(iterable $days): self
18    {
19        $distinct = [];
20
21        foreach ($days as $day) {
22            $distinct[$day->name] = $day;
23        }
24
25        return self::fromList($distinct);
26    }
27
28    public function containsDay(DayOfWeek $day): bool
29    {
30        return $this->containsWhere(static fn(DayOfWeek $candidate): bool => $candidate === $day);
31    }
32
33    /** @return list<string> */
34    public function listNames(): array
35    {
36        return $this->mapToList(static fn(DayOfWeek $day): string => $day->name);
37    }
38}