From b3e5f68fe1518646f4d6fcf7a84978e7937f56ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andre=CC=81=20Pimpa=CC=83o?= Date: Thu, 9 May 2024 12:10:07 +0100 Subject: [PATCH] feat: added Language and UnitSystem traits --- src/Endpoint/Util/LanguageTrait.php | 28 --------------------------- src/Endpoint/Util/UnitSystemTrait.php | 28 --------------------------- src/Language/Language.php | 2 +- src/OpenWeatherMap.php | 4 ++-- src/Resource/GeocodingResource.php | 2 +- src/Resource/Util/LanguageTrait.php | 24 +++++++++++++++++++++++ src/Resource/Util/UnitSystemTrait.php | 24 +++++++++++++++++++++++ src/Resource/Util/ValidationTrait.php | 22 +++++++++++++++++++-- src/Resource/WeatherResource.php | 4 ++++ src/UnitSystem/UnitSystem.php | 2 +- 10 files changed, 77 insertions(+), 63 deletions(-) delete mode 100644 src/Endpoint/Util/LanguageTrait.php delete mode 100644 src/Endpoint/Util/UnitSystemTrait.php create mode 100644 src/Resource/Util/LanguageTrait.php create mode 100644 src/Resource/Util/UnitSystemTrait.php diff --git a/src/Endpoint/Util/LanguageTrait.php b/src/Endpoint/Util/LanguageTrait.php deleted file mode 100644 index 63e6cec..0000000 --- a/src/Endpoint/Util/LanguageTrait.php +++ /dev/null @@ -1,28 +0,0 @@ -assert($language, 'language'); - - $clone = clone $this; - $clone->language = $language; - - return $clone; - } - - public function getLanguage(): string - { - return $this->language; - } -} \ No newline at end of file diff --git a/src/Endpoint/Util/UnitSystemTrait.php b/src/Endpoint/Util/UnitSystemTrait.php deleted file mode 100644 index 194249f..0000000 --- a/src/Endpoint/Util/UnitSystemTrait.php +++ /dev/null @@ -1,28 +0,0 @@ -assert($unitSystem, 'unitSystem'); - - $clone = clone $this; - $clone->unitSystem = $unitSystem; - - return $clone; - } - - public function getUnitSystem(): string - { - return $this->unitSystem; - } -} \ No newline at end of file diff --git a/src/Language/Language.php b/src/Language/Language.php index 08bb8ca..a92c795 100644 --- a/src/Language/Language.php +++ b/src/Language/Language.php @@ -55,7 +55,7 @@ class Language public const VIETNAMESE = 'vi'; public const ZULU = 'zu'; - public static function getList(): array + public static function getOptions(): array { return (new Language)->getClassConstants(self::class); } diff --git a/src/OpenWeatherMap.php b/src/OpenWeatherMap.php index 63ff52d..49ad077 100644 --- a/src/OpenWeatherMap.php +++ b/src/OpenWeatherMap.php @@ -64,8 +64,8 @@ private function configureOptions(array $options): array $this->optionsResolver->setAllowedTypes('unitSystem', 'string'); $this->optionsResolver->setAllowedTypes('language', 'string'); - $this->optionsResolver->setAllowedValues('unitSystem', UnitSystem::getList()); - $this->optionsResolver->setAllowedValues('language', Language::getList()); + $this->optionsResolver->setAllowedValues('unitSystem', UnitSystem::getOptions()); + $this->optionsResolver->setAllowedValues('language', Language::getOptions()); return $this->optionsResolver->resolve($options); } diff --git a/src/Resource/GeocodingResource.php b/src/Resource/GeocodingResource.php index 63f6b38..fa8ef48 100644 --- a/src/Resource/GeocodingResource.php +++ b/src/Resource/GeocodingResource.php @@ -46,7 +46,7 @@ public function getByLocationName(string $locationName, int $numResults = self:: public function getByZipCode(string $zipCode, string $countryCode): ZipLocation { $this->validateQuery($zipCode, 'zipCode'); - $this->validateCountry($countryCode, 'countryCode'); + $this->validateCountryCode($countryCode); $data = $this->api->request( method: 'GET', diff --git a/src/Resource/Util/LanguageTrait.php b/src/Resource/Util/LanguageTrait.php new file mode 100644 index 0000000..36e3444 --- /dev/null +++ b/src/Resource/Util/LanguageTrait.php @@ -0,0 +1,24 @@ +validateLanguage($language); + + $clone = deep_copy($this); + $clone->api->addQueryDefault('lang', $language); + + return $clone; + } +} \ No newline at end of file diff --git a/src/Resource/Util/UnitSystemTrait.php b/src/Resource/Util/UnitSystemTrait.php new file mode 100644 index 0000000..ed48aee --- /dev/null +++ b/src/Resource/Util/UnitSystemTrait.php @@ -0,0 +1,24 @@ +validateUnitSystem($unitSystem); + + $clone = deep_copy($this); + $clone->api->addQueryDefault('units', $unitSystem); + + return $clone; + } +} \ No newline at end of file diff --git a/src/Resource/Util/ValidationTrait.php b/src/Resource/Util/ValidationTrait.php index 50034b5..cf8eb62 100644 --- a/src/Resource/Util/ValidationTrait.php +++ b/src/Resource/Util/ValidationTrait.php @@ -2,6 +2,8 @@ namespace ProgrammatorDev\OpenWeatherMap\Resource\Util; +use ProgrammatorDev\OpenWeatherMap\Language\Language; +use ProgrammatorDev\OpenWeatherMap\UnitSystem\UnitSystem; use ProgrammatorDev\Validator\Exception\ValidationException; use ProgrammatorDev\Validator\Validator; @@ -35,8 +37,24 @@ private function validateCoordinate(float $latitude, float $longitude): void /** * @throws ValidationException */ - private function validateCountry(string $countryCode, string $name): void + private function validateCountryCode(string $countryCode): void { - Validator::country()->assert($countryCode, $name); + Validator::country()->assert($countryCode, 'countryCode'); + } + + /** + * @throws ValidationException + */ + private function validateLanguage(string $language): void + { + Validator::choice(Language::getOptions())->assert($language, 'language'); + } + + /** + * @throws ValidationException + */ + private function validateUnitSystem(string $unitSystem): void + { + Validator::choice(UnitSystem::getOptions())->assert($unitSystem, 'unitSystem'); } } \ No newline at end of file diff --git a/src/Resource/WeatherResource.php b/src/Resource/WeatherResource.php index 3fcfb8a..66803a4 100644 --- a/src/Resource/WeatherResource.php +++ b/src/Resource/WeatherResource.php @@ -5,12 +5,16 @@ use ProgrammatorDev\Api\Method; use ProgrammatorDev\OpenWeatherMap\Entity\Weather\Weather; use ProgrammatorDev\OpenWeatherMap\Entity\Weather\WeatherCollection; +use ProgrammatorDev\OpenWeatherMap\Resource\Util\LanguageTrait; +use ProgrammatorDev\OpenWeatherMap\Resource\Util\UnitSystemTrait; use ProgrammatorDev\OpenWeatherMap\Resource\Util\ValidationTrait; use ProgrammatorDev\Validator\Exception\ValidationException; use Psr\Http\Client\ClientExceptionInterface; class WeatherResource extends Resource { + use LanguageTrait; + use UnitSystemTrait; use ValidationTrait; private const NUM_RESULTS = 40; diff --git a/src/UnitSystem/UnitSystem.php b/src/UnitSystem/UnitSystem.php index e140e31..b7239d3 100644 --- a/src/UnitSystem/UnitSystem.php +++ b/src/UnitSystem/UnitSystem.php @@ -12,7 +12,7 @@ class UnitSystem public const IMPERIAL = 'imperial'; public const STANDARD = 'standard'; - public static function getList(): array + public static function getOptions(): array { return (new UnitSystem)->getClassConstants(self::class); }