Files
michaelschiemer/.archive/Archived/DependencyCollection.php

94 lines
2.1 KiB
PHP

<?php
declare(strict_types=1);
namespace Archive\Archived;
use App\Framework\View\Cache\CacheDependency;
use App\Framework\View\Cache\DependencyType;
final readonly class DependencyCollection
{
/** @param CacheDependency[] $dependencies */
public function __construct(
private array $dependencies = [],
) {
foreach ($dependencies as $dependency) {
if (!$dependency instanceof CacheDependency) {
throw new \InvalidArgumentException('All items must be CacheDependency instances');
}
}
}
public static function empty(): self
{
return new self([]);
}
public static function fromStrings(array $strings): self
{
$dependencies = array_map(
fn(string $str) => CacheDependency::fromString($str),
$strings
);
return new self($dependencies);
}
public function add(CacheDependency $dependency): self
{
// Prevent duplicates
foreach ($this->dependencies as $existing) {
if ($existing->equals($dependency)) {
return $this;
}
}
return new self([...$this->dependencies, $dependency]);
}
public function has(string $key): bool
{
foreach ($this->dependencies as $dependency) {
if ($dependency->key === $key) {
return true;
}
}
return false;
}
public function ofType(DependencyType $type): self
{
return new self(
array_filter(
$this->dependencies,
fn(CacheDependency $dep) => $dep->type === $type
)
);
}
public function count(): int
{
return count($this->dependencies);
}
public function isEmpty(): bool
{
return empty($this->dependencies);
}
public function toArray(): array
{
return array_map(
fn(CacheDependency $dep) => $dep->toArray(),
$this->dependencies
);
}
/** @return CacheDependency[] */
public function all(): array
{
return $this->dependencies;
}
}