Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
80.00% |
4 / 5 |
CRAP | |
91.30% |
21 / 23 |
| QuoteRepository | |
0.00% |
0 / 1 |
|
80.00% |
4 / 5 |
14.13 | |
91.30% |
21 / 23 |
| __construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
| findByCriteria | |
100.00% |
1 / 1 |
5 | |
100.00% |
7 / 7 |
|||
| isSameAuthor | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| getAuthorSlug | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| fetchAll | |
0.00% |
0 / 1 |
6.22 | |
81.82% |
9 / 11 |
|||
| <?php | |
| declare(strict_types=1); | |
| namespace App\Quote\Repository; | |
| use App\Collection\DataSourceCollection; | |
| use App\Quote\DataSource\DataSourceInterface; | |
| use App\Quote\Model\QuoteInterface; | |
| use Symfony\Component\String\Slugger\SluggerInterface; | |
| use Symfony\Component\String\UnicodeString; | |
| final class QuoteRepository implements QuoteRepositoryInterface | |
| { | |
| private DataSourceCollection $dataSourceCollection; | |
| private SluggerInterface $slugger; | |
| public function __construct( | |
| DataSourceCollection $dataSourceCollection, | |
| SluggerInterface $slugger | |
| ) { | |
| $this->dataSourceCollection = $dataSourceCollection; | |
| $this->slugger = $slugger; | |
| } | |
| public function findByCriteria(array $criteria): ?array | |
| { | |
| $quotes = []; | |
| foreach ($this->fetchAll() as $quote) { | |
| if ($this->isSameAuthor($criteria, $quote)) { | |
| $quotes[] = $quote; | |
| } | |
| } | |
| if (isset($criteria['limit'])) { | |
| return array_slice($quotes, 0, $criteria['limit']); | |
| } | |
| return $quotes; | |
| } | |
| private function isSameAuthor(array $criteria, QuoteInterface $quote): bool | |
| { | |
| return $this->getAuthorSlug($quote->getAuthor()) === $this->getAuthorSlug($criteria['author']); | |
| } | |
| private function getAuthorSlug(string $author): string | |
| { | |
| return (new UnicodeString($this->slugger->slug($author)->toString()))->trim()->lower()->toString(); | |
| } | |
| public function fetchAll(): array | |
| { | |
| $quotesCollection = []; | |
| foreach ($this->dataSourceCollection->all() as $dataSource) { | |
| if (!$dataSource instanceof DataSourceInterface) { | |
| continue; | |
| } | |
| if (empty($dataSource->getQuotes()->items())) { | |
| continue; | |
| } | |
| foreach ($dataSource->getQuotes()->items() as $quote) { | |
| if (!$quote instanceof QuoteInterface) { | |
| continue; | |
| } | |
| $quotesCollection[] = $quote; | |
| } | |
| } | |
| return $quotesCollection; | |
| } | |
| } |