From a053a330aa130e45ad29e9aac0227ccaaceaf848 Mon Sep 17 00:00:00 2001 From: nkl-kst <24235974+nkl-kst@users.noreply.github.com> Date: Fri, 12 May 2023 08:04:16 +0200 Subject: [PATCH 1/3] Added generics to abstract classes --- src/Client/Endpoint/AbstractEndpoint.php | 6 +++++- src/Serializer/AbstractSerializer.php | 5 ++++- src/Serializer/CountrySerializer.php | 3 +++ src/Serializer/EquipmentSerializer.php | 3 +++ src/Serializer/Event/EventSerializer.php | 3 +++ src/Serializer/Event/HighlightSerializer.php | 3 +++ src/Serializer/Event/LineupSerializer.php | 3 +++ src/Serializer/Event/LivescoreSerializer.php | 3 +++ src/Serializer/Event/ResultSerializer.php | 3 +++ src/Serializer/Event/StatisticSerializer.php | 3 +++ src/Serializer/Event/TelevisionSerializer.php | 3 +++ src/Serializer/Event/TimelineSerializer.php | 3 +++ src/Serializer/LeagueSerializer.php | 3 +++ src/Serializer/LoveSerializer.php | 3 +++ src/Serializer/Player/ContractSerializer.php | 3 +++ src/Serializer/Player/FormerTeamSerializer.php | 3 +++ src/Serializer/Player/HonourSerializer.php | 3 +++ src/Serializer/Player/PlayerSerializer.php | 3 +++ src/Serializer/SeasonSerializer.php | 3 +++ src/Serializer/Serializer.php | 2 +- src/Serializer/SportSerializer.php | 3 +++ src/Serializer/Table/EntrySerializer.php | 3 +++ src/Serializer/TeamSerializer.php | 3 +++ 23 files changed, 70 insertions(+), 3 deletions(-) diff --git a/src/Client/Endpoint/AbstractEndpoint.php b/src/Client/Endpoint/AbstractEndpoint.php index 02c03e0..1c9d71f 100644 --- a/src/Client/Endpoint/AbstractEndpoint.php +++ b/src/Client/Endpoint/AbstractEndpoint.php @@ -61,7 +61,11 @@ protected function request(): string } /** - * @param object[] $entities + * @template TObject of object + * + * @param TObject[] $entities + * + * @return ?TObject */ protected function getSingleEntity(array $entities): ?object { diff --git a/src/Serializer/AbstractSerializer.php b/src/Serializer/AbstractSerializer.php index bce7f73..6430c6b 100644 --- a/src/Serializer/AbstractSerializer.php +++ b/src/Serializer/AbstractSerializer.php @@ -5,6 +5,9 @@ use Exception; use JsonMapper; +/** + * @template TObject of object + */ abstract class AbstractSerializer { protected JsonMapper $mapper; @@ -57,7 +60,7 @@ private function validate(?object $json): ?string } /** - * @return object[] + * @return TObject[] * * @throws Exception */ diff --git a/src/Serializer/CountrySerializer.php b/src/Serializer/CountrySerializer.php index 70fd819..8eaf13e 100644 --- a/src/Serializer/CountrySerializer.php +++ b/src/Serializer/CountrySerializer.php @@ -4,6 +4,9 @@ use NklKst\TheSportsDb\Entity\Country; +/** + * @extends AbstractSerializer + */ class CountrySerializer extends AbstractSerializer { protected function getEntityClass(): string diff --git a/src/Serializer/EquipmentSerializer.php b/src/Serializer/EquipmentSerializer.php index 6afc3fc..186332a 100644 --- a/src/Serializer/EquipmentSerializer.php +++ b/src/Serializer/EquipmentSerializer.php @@ -4,6 +4,9 @@ use NklKst\TheSportsDb\Entity\Equipment; +/** + * @extends AbstractSerializer + */ class EquipmentSerializer extends AbstractSerializer { protected function getEntityClass(): string diff --git a/src/Serializer/Event/EventSerializer.php b/src/Serializer/Event/EventSerializer.php index 6c3c460..5a9e92d 100644 --- a/src/Serializer/Event/EventSerializer.php +++ b/src/Serializer/Event/EventSerializer.php @@ -5,6 +5,9 @@ use NklKst\TheSportsDb\Entity\Event\Event; use NklKst\TheSportsDb\Serializer\AbstractSerializer; +/** + * @extends AbstractSerializer + */ class EventSerializer extends AbstractSerializer { protected function getEntityClass(): string diff --git a/src/Serializer/Event/HighlightSerializer.php b/src/Serializer/Event/HighlightSerializer.php index 6b27914..4025c73 100644 --- a/src/Serializer/Event/HighlightSerializer.php +++ b/src/Serializer/Event/HighlightSerializer.php @@ -5,6 +5,9 @@ use NklKst\TheSportsDb\Entity\Event\Highlight; use NklKst\TheSportsDb\Serializer\AbstractSerializer; +/** + * @extends AbstractSerializer + */ class HighlightSerializer extends AbstractSerializer { protected function getEntityClass(): string diff --git a/src/Serializer/Event/LineupSerializer.php b/src/Serializer/Event/LineupSerializer.php index ebad653..31ca6d7 100644 --- a/src/Serializer/Event/LineupSerializer.php +++ b/src/Serializer/Event/LineupSerializer.php @@ -5,6 +5,9 @@ use NklKst\TheSportsDb\Entity\Event\Lineup; use NklKst\TheSportsDb\Serializer\AbstractSerializer; +/** + * @extends AbstractSerializer + */ class LineupSerializer extends AbstractSerializer { protected function getEntityClass(): string diff --git a/src/Serializer/Event/LivescoreSerializer.php b/src/Serializer/Event/LivescoreSerializer.php index 29f26fc..2c98b23 100644 --- a/src/Serializer/Event/LivescoreSerializer.php +++ b/src/Serializer/Event/LivescoreSerializer.php @@ -5,6 +5,9 @@ use NklKst\TheSportsDb\Entity\Event\Livescore; use NklKst\TheSportsDb\Serializer\AbstractSerializer; +/** + * @extends AbstractSerializer + */ class LivescoreSerializer extends AbstractSerializer { protected function getEntityClass(): string diff --git a/src/Serializer/Event/ResultSerializer.php b/src/Serializer/Event/ResultSerializer.php index bddf591..778170a 100644 --- a/src/Serializer/Event/ResultSerializer.php +++ b/src/Serializer/Event/ResultSerializer.php @@ -5,6 +5,9 @@ use NklKst\TheSportsDb\Entity\Event\Result; use NklKst\TheSportsDb\Serializer\AbstractSerializer; +/** + * @extends AbstractSerializer + */ class ResultSerializer extends AbstractSerializer { protected function getEntityClass(): string diff --git a/src/Serializer/Event/StatisticSerializer.php b/src/Serializer/Event/StatisticSerializer.php index 961c2e3..1a688b7 100644 --- a/src/Serializer/Event/StatisticSerializer.php +++ b/src/Serializer/Event/StatisticSerializer.php @@ -5,6 +5,9 @@ use NklKst\TheSportsDb\Entity\Event\Statistic; use NklKst\TheSportsDb\Serializer\AbstractSerializer; +/** + * @extends AbstractSerializer + */ class StatisticSerializer extends AbstractSerializer { protected function getEntityClass(): string diff --git a/src/Serializer/Event/TelevisionSerializer.php b/src/Serializer/Event/TelevisionSerializer.php index f50b255..8e96f61 100644 --- a/src/Serializer/Event/TelevisionSerializer.php +++ b/src/Serializer/Event/TelevisionSerializer.php @@ -5,6 +5,9 @@ use NklKst\TheSportsDb\Entity\Event\Television; use NklKst\TheSportsDb\Serializer\AbstractSerializer; +/** + * @extends AbstractSerializer + */ class TelevisionSerializer extends AbstractSerializer { protected function getEntityClass(): string diff --git a/src/Serializer/Event/TimelineSerializer.php b/src/Serializer/Event/TimelineSerializer.php index ecd7d3c..2713c71 100644 --- a/src/Serializer/Event/TimelineSerializer.php +++ b/src/Serializer/Event/TimelineSerializer.php @@ -5,6 +5,9 @@ use NklKst\TheSportsDb\Entity\Event\Timeline; use NklKst\TheSportsDb\Serializer\AbstractSerializer; +/** + * @extends AbstractSerializer + */ class TimelineSerializer extends AbstractSerializer { protected function getEntityClass(): string diff --git a/src/Serializer/LeagueSerializer.php b/src/Serializer/LeagueSerializer.php index 32c1b17..434a68d 100644 --- a/src/Serializer/LeagueSerializer.php +++ b/src/Serializer/LeagueSerializer.php @@ -4,6 +4,9 @@ use NklKst\TheSportsDb\Entity\League; +/** + * @extends AbstractSerializer + */ class LeagueSerializer extends AbstractSerializer { protected function getEntityClass(): string diff --git a/src/Serializer/LoveSerializer.php b/src/Serializer/LoveSerializer.php index 69c0599..3a16a5d 100644 --- a/src/Serializer/LoveSerializer.php +++ b/src/Serializer/LoveSerializer.php @@ -4,6 +4,9 @@ use NklKst\TheSportsDb\Entity\Love; +/** + * @extends AbstractSerializer + */ class LoveSerializer extends AbstractSerializer { protected function getEntityClass(): string diff --git a/src/Serializer/Player/ContractSerializer.php b/src/Serializer/Player/ContractSerializer.php index ec3c4e7..e2efa52 100644 --- a/src/Serializer/Player/ContractSerializer.php +++ b/src/Serializer/Player/ContractSerializer.php @@ -5,6 +5,9 @@ use NklKst\TheSportsDb\Entity\Player\Contract; use NklKst\TheSportsDb\Serializer\AbstractSerializer; +/** + * @extends AbstractSerializer + */ class ContractSerializer extends AbstractSerializer { protected function getEntityClass(): string diff --git a/src/Serializer/Player/FormerTeamSerializer.php b/src/Serializer/Player/FormerTeamSerializer.php index 0ea9121..37c9049 100644 --- a/src/Serializer/Player/FormerTeamSerializer.php +++ b/src/Serializer/Player/FormerTeamSerializer.php @@ -5,6 +5,9 @@ use NklKst\TheSportsDb\Entity\Player\FormerTeam; use NklKst\TheSportsDb\Serializer\AbstractSerializer; +/** + * @extends AbstractSerializer + */ class FormerTeamSerializer extends AbstractSerializer { protected function getEntityClass(): string diff --git a/src/Serializer/Player/HonourSerializer.php b/src/Serializer/Player/HonourSerializer.php index 0e2ec10..046cf91 100644 --- a/src/Serializer/Player/HonourSerializer.php +++ b/src/Serializer/Player/HonourSerializer.php @@ -5,6 +5,9 @@ use NklKst\TheSportsDb\Entity\Player\Honour; use NklKst\TheSportsDb\Serializer\AbstractSerializer; +/** + * @extends AbstractSerializer + */ class HonourSerializer extends AbstractSerializer { protected function getEntityClass(): string diff --git a/src/Serializer/Player/PlayerSerializer.php b/src/Serializer/Player/PlayerSerializer.php index 6710647..9812e0d 100644 --- a/src/Serializer/Player/PlayerSerializer.php +++ b/src/Serializer/Player/PlayerSerializer.php @@ -5,6 +5,9 @@ use NklKst\TheSportsDb\Entity\Player\Player; use NklKst\TheSportsDb\Serializer\AbstractSerializer; +/** + * @extends AbstractSerializer + */ class PlayerSerializer extends AbstractSerializer { protected function getEntityClass(): string diff --git a/src/Serializer/SeasonSerializer.php b/src/Serializer/SeasonSerializer.php index 259871f..e0efe43 100644 --- a/src/Serializer/SeasonSerializer.php +++ b/src/Serializer/SeasonSerializer.php @@ -4,6 +4,9 @@ use NklKst\TheSportsDb\Entity\Season; +/** + * @extends AbstractSerializer + */ class SeasonSerializer extends AbstractSerializer { protected function getEntityClass(): string diff --git a/src/Serializer/Serializer.php b/src/Serializer/Serializer.php index bd42632..d65fac3 100644 --- a/src/Serializer/Serializer.php +++ b/src/Serializer/Serializer.php @@ -178,7 +178,7 @@ public function serializeHighlights(string $content): array */ public function serializeHonors(string $content): array { - return $this->honorSerializer->serialize($content); + return $this->honorSerializer->serialize($content); // @phpstan-ignore-line } /** diff --git a/src/Serializer/SportSerializer.php b/src/Serializer/SportSerializer.php index dcbe5d2..d207eab 100644 --- a/src/Serializer/SportSerializer.php +++ b/src/Serializer/SportSerializer.php @@ -4,6 +4,9 @@ use NklKst\TheSportsDb\Entity\Sport; +/** + * @extends AbstractSerializer + */ class SportSerializer extends AbstractSerializer { protected function getEntityClass(): string diff --git a/src/Serializer/Table/EntrySerializer.php b/src/Serializer/Table/EntrySerializer.php index f543ead..9d33fe2 100644 --- a/src/Serializer/Table/EntrySerializer.php +++ b/src/Serializer/Table/EntrySerializer.php @@ -5,6 +5,9 @@ use NklKst\TheSportsDb\Entity\Table\Entry; use NklKst\TheSportsDb\Serializer\AbstractSerializer; +/** + * @extends AbstractSerializer + */ class EntrySerializer extends AbstractSerializer { protected function getEntityClass(): string diff --git a/src/Serializer/TeamSerializer.php b/src/Serializer/TeamSerializer.php index a2985d8..5738b44 100644 --- a/src/Serializer/TeamSerializer.php +++ b/src/Serializer/TeamSerializer.php @@ -4,6 +4,9 @@ use NklKst\TheSportsDb\Entity\Team; +/** + * @extends AbstractSerializer + */ class TeamSerializer extends AbstractSerializer { protected function getEntityClass(): string From 08ce83f25856e38bc57f43fa1f0fc4b9105452b2 Mon Sep 17 00:00:00 2001 From: nkl-kst <24235974+nkl-kst@users.noreply.github.com> Date: Fri, 12 May 2023 08:19:38 +0200 Subject: [PATCH 2/3] Fixed PHPStan errors in test classes --- phpstan.neon | 2 +- test/unit/Util/TestUtils.php | 31 +++++++++++++++++-------------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/phpstan.neon b/phpstan.neon index d438334..673b56c 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -1,5 +1,5 @@ parameters: - level: 6 + level: 7 paths: - src - test diff --git a/test/unit/Util/TestUtils.php b/test/unit/Util/TestUtils.php index a0652db..d675546 100644 --- a/test/unit/Util/TestUtils.php +++ b/test/unit/Util/TestUtils.php @@ -39,9 +39,10 @@ public static function getHiddenProperty(object $object, string $property) $ref = new ReflectionObject($object); try { - $prop = $ref->hasProperty($property) ? - $ref->getProperty($property) : - $ref->getParentClass()->getProperty($property); + $prop = $ref->hasProperty($property) ? $ref->getProperty($property) : null; + if (!$prop && $ref->getParentClass()) { + $prop = $ref->getParentClass()->getProperty($property); + } } catch (ReflectionException $e) { return null; } @@ -51,8 +52,8 @@ public static function getHiddenProperty(object $object, string $property) } /** - * @param string $class Class to get static property from - * @param string $property Property to get + * @param class-string $class Class to get static property from + * @param string $property Property to get * * @return mixed|null */ @@ -66,9 +67,9 @@ public static function getHiddenStaticProperty(string $class, string $property) } /** - * @param string $class Class to set static property - * @param string $property Property to change - * @param mixed $value Value to set + * @param class-string $class Class to set static property + * @param string $property Property to change + * @param mixed $value Value to set */ public static function setHiddenStaticProperty(string $class, string $property, $value): void { @@ -90,9 +91,10 @@ public static function getHiddenMethod(object $object, string $method): ?Closure $ref = new ReflectionObject($object); try { - $meth = $ref->hasMethod($method) ? - $ref->getMethod($method) : - $ref->getParentClass()->getMethod($method); + $meth = $ref->hasMethod($method) ? $ref->getMethod($method) : null; + if (!$meth && $ref->getParentClass()) { + $meth = $ref->getParentClass()->getMethod($method); + } } catch (ReflectionException $e) { return null; } @@ -102,8 +104,8 @@ public static function getHiddenMethod(object $object, string $method): ?Closure } /** - * @param string $class Class to get static method from - * @param string $method Method to get + * @param class-string $class Class to get static method from + * @param string $method Method to get */ public static function getHiddenStaticMethod(string $class, string $method): ?Closure { @@ -134,6 +136,7 @@ public static function assertThatAllPropertiesAreInitialized($objects): void // Check all objects foreach ($objects as $object) { $class = get_class($object); + assert(is_string($class)); // Get properties by class name, because get_object_vars() doesn't return uninitialized properties $properties = array_keys(get_class_vars($class)); @@ -161,6 +164,6 @@ public static function assertThatAllPropertiesAreInitialized($objects): void */ public static function setPatreonKey(Client $client): void { - $client->configure()->setKey(getenv('PATREON_KEY')); + $client->configure()->setKey(strval(getenv('PATREON_KEY'))); } } From 56a3a9d1fbe279fdf9884a3ae0fbf155556afa89 Mon Sep 17 00:00:00 2001 From: nkl-kst <24235974+nkl-kst@users.noreply.github.com> Date: Fri, 12 May 2023 08:27:59 +0200 Subject: [PATCH 3/3] Changed PHPStan badge to level 7 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8e57a8c..8427d85 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![Build](https://github.com/nkl-kst/the-sports-db/workflows/Build/badge.svg)](https://github.com/nkl-kst/the-sports-db/actions) [![Packagist Version](https://img.shields.io/packagist/v/nkl-kst/the-sports-db)](https://packagist.org/packages/nkl-kst/the-sports-db) [![Coverage Status](https://coveralls.io/repos/github/nkl-kst/the-sports-db/badge.svg?branch=master)](https://coveralls.io/github/nkl-kst/the-sports-db?branch=master) -[![PHPStan Level](https://img.shields.io/badge/PHPStan-level%206-brightgreen.svg?style=flat)](https://github.com/nkl-kst/the-sports-db/actions) +[![PHPStan Level](https://img.shields.io/badge/PHPStan-level%207-brightgreen.svg?style=flat)](https://github.com/nkl-kst/the-sports-db/actions) [![GitHub](https://img.shields.io/github/license/nkl-kst/the-sports-db)](https://github.com/nkl-kst/the-sports-db/blob/master/LICENSE.md) An easy-to-use PHP library to get data from https://www.thesportsdb.com.