From 570c18a0698ad3e4129b80cb2581ad34403f7bc9 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Fri, 10 Apr 2020 20:01:46 -0400 Subject: [PATCH] Type all the class attributes --- README.md | 6 +- app/bootstrap.php | 82 ++++++------------- app/views/anime/list.php | 8 +- src/AnimeClient/API/APIRequestBuilder.php | 18 ++-- .../API/Anilist/AnilistRequestBuilder.php | 6 +- src/AnimeClient/API/Anilist/AnilistTrait.php | 6 +- src/AnimeClient/API/Anilist/Model.php | 2 +- src/AnimeClient/API/CacheTrait.php | 2 +- src/AnimeClient/API/Kitsu/Auth.php | 4 +- .../API/Kitsu/KitsuRequestBuilder.php | 4 +- src/AnimeClient/API/Kitsu/KitsuTrait.php | 2 +- src/AnimeClient/API/Kitsu/Model.php | 10 +-- .../Transformer/AnimeListTransformer.php | 3 +- .../Kitsu/Transformer/AnimeTransformer.php | 3 +- .../Transformer/MangaListTransformer.php | 7 +- src/AnimeClient/API/ParallelAPIRequest.php | 2 +- src/AnimeClient/Command/BaseCommand.php | 2 +- src/AnimeClient/Command/SyncLists.php | 4 +- src/AnimeClient/Command/UpdateThumbnails.php | 8 +- src/AnimeClient/Controller.php | 18 ++-- src/AnimeClient/Controller/Anime.php | 5 +- .../Controller/AnimeCollection.php | 4 +- src/AnimeClient/Controller/Character.php | 2 +- src/AnimeClient/Controller/Manga.php | 2 +- src/AnimeClient/Controller/People.php | 2 +- src/AnimeClient/Controller/Settings.php | 11 +-- src/AnimeClient/Controller/User.php | 2 +- src/AnimeClient/Dispatcher.php | 19 ++--- src/AnimeClient/FormGenerator.php | 5 +- src/AnimeClient/MenuGenerator.php | 18 ++-- src/AnimeClient/Model/Anime.php | 6 +- src/AnimeClient/Model/AnimeCollection.php | 2 +- src/AnimeClient/Model/Collection.php | 4 +- src/AnimeClient/Model/Manga.php | 11 +-- src/AnimeClient/Model/Settings.php | 4 +- src/AnimeClient/RoutingBase.php | 20 ++--- src/AnimeClient/UrlGenerator.php | 4 +- src/AnimeClient/Util.php | 2 +- src/Ion/ArrayWrapper.php | 38 --------- src/Ion/Config.php | 6 +- src/Ion/Model.php | 1 - src/Ion/Model/DB.php | 55 ------------- src/Ion/StringWrapper.php | 38 --------- src/Ion/Transformer/AbstractTransformer.php | 5 -- src/Ion/Type/ArrayType.php | 21 +++-- src/Ion/Type/StringType.php | 11 +++ src/Ion/View.php | 5 +- .../AnimeClient/API/APIRequestBuilderTest.php | 4 +- tests/Ion/Di/ContainerAwareTest.php | 2 +- tests/Ion/IonTestCase.php | 3 +- tests/Ion/Model/BaseDBModelTest.php | 29 ------- tests/Ion/StringWrapperTest.php | 39 --------- tests/Ion/Type/ArrayTypeTest.php | 62 +++++++------- tests/Ion/Type/StringTypeTest.php | 13 +-- 54 files changed, 218 insertions(+), 434 deletions(-) delete mode 100644 src/Ion/ArrayWrapper.php delete mode 100644 src/Ion/Model/DB.php delete mode 100644 src/Ion/StringWrapper.php delete mode 100644 tests/Ion/Model/BaseDBModelTest.php delete mode 100644 tests/Ion/StringWrapperTest.php diff --git a/README.md b/README.md index a43e5faa..4bf489cf 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # Hummingbird Anime Client -Update your anime/manga list on Kitsu.io and MyAnimeList.net +Update your anime/manga list on Kitsu.io and Anilist -[![Build Status](https://travis-ci.org/timw4mail/HummingBirdAnimeClient.svg?branch=master)](https://travis-ci.org/timw4mail/HummingBirdAnimeClient) +[![Build Status](https://travis-ci.com/timw4mail/HummingBirdAnimeClient.svg?branch=master)](https://travis-ci.com/github/timw4mail/HummingBirdAnimeClient) [![Build Status](https://jenkins.timshomepage.net/buildStatus/icon?job=timw4mail/HummingBirdAnimeClient/develop)](https://jenkins.timshomepage.net/job/timw4mail/HummingBirdAnimeClient/develop) [[Hosted Example](https://list.timshomepage.net)] @@ -31,7 +31,7 @@ Update your anime/manga list on Kitsu.io and MyAnimeList.net ### Requirements -* PHP 7.3+ +* PHP 7.4+ * PDO SQLite or PDO PostgreSQL (For collection tab) * GD extension for caching images diff --git a/app/bootstrap.php b/app/bootstrap.php index c641ffe0..02dd99c7 100644 --- a/app/bootstrap.php +++ b/app/bootstrap.php @@ -28,14 +28,15 @@ use Aviat\AnimeClient\Model; use Aviat\Banker\Pool; use Aviat\Ion\Config; use Aviat\Ion\Di\Container; +use Aviat\Ion\Di\ContainerInterface; +use Laminas\Diactoros\{Response, ServerRequestFactory}; use Monolog\Handler\RotatingFileHandler; use Monolog\Logger; -use Zend\Diactoros\{Response, ServerRequestFactory}; // ----------------------------------------------------------------------------- // Setup DI container // ----------------------------------------------------------------------------- -return static function ($configArray = []) { +return static function (array $configArray = []): Container { $container = new Container(); // ------------------------------------------------------------------------- @@ -60,26 +61,20 @@ return static function ($configArray = []) { // ------------------------------------------------------------------------- // Create Config Object - $container->set('config', static function() use ($configArray) { - return new Config($configArray); - }); + $container->set('config', fn () => new Config($configArray)); // Create Cache Object - $container->set('cache', static function($container): Pool { + $container->set('cache', static function(ContainerInterface $container): Pool { $logger = $container->getLogger(); $config = $container->get('config')->get('cache'); return new Pool($config, $logger); }); - // Create List Cache - // Create Aura Router Object - $container->set('aura-router', static function() { - return new RouterContainer; - }); + $container->set('aura-router', fn() => new RouterContainer); // Create Html helper Object - $container->set('html-helper', static function($container) { + $container->set('html-helper', static function(ContainerInterface $container) { $htmlHelper = (new HelperLocatorFactory)->newInstance(); $htmlHelper->set('menu', static function() use ($container) { $menuHelper = new Helper\Menu(); @@ -101,31 +96,23 @@ return static function ($configArray = []) { }); // Create Request/Response Objects - $container->set('request', static function() { - return ServerRequestFactory::fromGlobals( - $_SERVER, - $_GET, - $_POST, - $_COOKIE, - $_FILES - ); - }); - $container->set('response', static function() { - return new Response; - }); + $container->set('request', fn () => ServerRequestFactory::fromGlobals( + $_SERVER, + $_GET, + $_POST, + $_COOKIE, + $_FILES + )); + $container->set('response', fn () => new Response); // Create session Object - $container->set('session', static function() { - return (new SessionFactory())->newInstance($_COOKIE); - }); + $container->set('session', fn () => (new SessionFactory())->newInstance($_COOKIE)); // Miscellaneous helper methods - $container->set('util', static function($container): Util { - return new Util($container); - }); + $container->set('util', fn ($container) => new Util($container)); // Models - $container->set('kitsu-model', static function($container): Kitsu\Model { + $container->set('kitsu-model', static function(ContainerInterface $container): Kitsu\Model { $requestBuilder = new KitsuRequestBuilder(); $requestBuilder->setLogger($container->getLogger('kitsu-request')); @@ -141,7 +128,7 @@ return static function ($configArray = []) { $model->setCache($cache); return $model; }); - $container->set('anilist-model', static function($container): Anilist\Model { + $container->set('anilist-model', static function(ContainerInterface $container): Anilist\Model { $requestBuilder = new Anilist\AnilistRequestBuilder(); $requestBuilder->setLogger($container->getLogger('anilist-request')); @@ -155,39 +142,24 @@ return static function ($configArray = []) { return $model; }); - - $container->set('anime-model', static function($container) { - return new Model\Anime($container); - }); - $container->set('manga-model', static function($container) { - return new Model\Manga($container); - }); - $container->set('anime-collection-model', static function($container) { - return new Model\AnimeCollection($container); - }); - $container->set('manga-collection-model', static function($container) { - return new Model\MangaCollection($container); - }); + $container->set('anime-model', fn ($container) => new Model\Anime($container)); + $container->set('manga-model', fn ($container) => new Model\Manga($container)); + $container->set('anime-collection-model', fn ($container) => new Model\AnimeCollection($container)); + $container->set('manga-collection-model', fn ($container) => new Model\MangaCollection($container)); $container->set('settings-model', static function($container) { - $model = new Model\Settings($container->get('config')); + $model = new Model\Settings($container->get('config')); $model->setContainer($container); return $model; }); // Miscellaneous Classes - $container->set('auth', static function($container) { - return new Kitsu\Auth($container); - }); - $container->set('url-generator', static function($container) { - return new UrlGenerator($container); - }); + $container->set('auth', fn ($container) => new Kitsu\Auth($container)); + $container->set('url-generator', fn ($container) => new UrlGenerator($container)); // ------------------------------------------------------------------------- // Dispatcher // ------------------------------------------------------------------------- - $container->set('dispatcher', static function($container) { - return new Dispatcher($container); - }); + $container->set('dispatcher', fn ($container) => new Dispatcher($container)); return $container; }; diff --git a/app/views/anime/list.php b/app/views/anime/list.php index a6b15374..be69c273 100644 --- a/app/views/anime/list.php +++ b/app/views/anime/list.php @@ -75,20 +75,20 @@ - picture("images/{$link['meta']['image']}", 'svg', [ + img("/public/images/{$link['meta']['image']}", [ 'class' => 'streaming-logo', 'width' => 50, 'height' => 50, 'alt' => "{$link['meta']['name']} logo", - ]); ?> + ]) ?> - picture("images/{$link['meta']['image']}", 'svg', [ + img("/public/images/{$link['meta']['image']}", [ 'class' => 'streaming-logo', 'width' => 50, 'height' => 50, 'alt' => "{$link['meta']['name']} logo", - ]); ?> + ]) ?> diff --git a/src/AnimeClient/API/APIRequestBuilder.php b/src/AnimeClient/API/APIRequestBuilder.php index 1e145f5d..2e018fb0 100644 --- a/src/AnimeClient/API/APIRequestBuilder.php +++ b/src/AnimeClient/API/APIRequestBuilder.php @@ -38,37 +38,37 @@ abstract class APIRequestBuilder { * Url prefix for making url requests * @var string */ - protected $baseUrl = ''; + protected string $baseUrl = ''; /** * Url path of the request * @var string */ - protected $path = ''; + protected string $path = ''; /** * Query string for the request * @var string */ - protected $query = ''; + protected string $query = ''; /** * Default request headers * @var array */ - protected $defaultHeaders = []; + protected array $defaultHeaders = []; /** * Valid HTTP request methods * @var array */ - protected $validMethods = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS']; + protected array $validMethods = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS']; /** * The current request * @var Request */ - protected $request; + protected Request $request; /** * Do a basic minimal GET request @@ -78,8 +78,10 @@ abstract class APIRequestBuilder { */ public static function simpleRequest(string $uri): Request { - return (new Request($uri)) - ->setHeader('User-Agent', USER_AGENT); + $request = (new Request($uri)); + $request->setHeader('User-Agent', USER_AGENT); + + return $request; } /** diff --git a/src/AnimeClient/API/Anilist/AnilistRequestBuilder.php b/src/AnimeClient/API/Anilist/AnilistRequestBuilder.php index 5504c13c..d2398f91 100644 --- a/src/AnimeClient/API/Anilist/AnilistRequestBuilder.php +++ b/src/AnimeClient/API/Anilist/AnilistRequestBuilder.php @@ -26,20 +26,20 @@ final class AnilistRequestBuilder extends APIRequestBuilder { * The base url for api requests * @var string $base_url */ - protected $baseUrl = 'https://graphql.anilist.co'; + protected string $baseUrl = 'https://graphql.anilist.co'; /** * Valid HTTP request methods * @var array */ - protected $validMethods = ['POST']; + protected array $validMethods = ['POST']; /** * HTTP headers to send with every request * * @var array */ - protected $defaultHeaders = [ + protected array $defaultHeaders = [ 'User-Agent' => USER_AGENT, 'Accept' => 'application/json', 'Content-Type' => 'application/json', diff --git a/src/AnimeClient/API/Anilist/AnilistTrait.php b/src/AnimeClient/API/Anilist/AnilistTrait.php index 388643d8..7a4bb5cd 100644 --- a/src/AnimeClient/API/Anilist/AnilistTrait.php +++ b/src/AnimeClient/API/Anilist/AnilistTrait.php @@ -38,20 +38,20 @@ trait AnilistTrait { * The request builder for the Anilist API * @var AnilistRequestBuilder */ - protected $requestBuilder; + protected AnilistRequestBuilder $requestBuilder; /** * The base url for api requests * @var string $base_url */ - protected $baseUrl = Anilist::BASE_URL; + protected string $baseUrl = Anilist::BASE_URL; /** * HTTP headers to send with every request * * @var array */ - protected $defaultHeaders = [ + protected array $defaultHeaders = [ 'Accept' => 'application/json', 'Accept-Encoding' => 'gzip', 'Content-type' => 'application/json', diff --git a/src/AnimeClient/API/Anilist/Model.php b/src/AnimeClient/API/Anilist/Model.php index 51b893e8..c33c0fd7 100644 --- a/src/AnimeClient/API/Anilist/Model.php +++ b/src/AnimeClient/API/Anilist/Model.php @@ -39,7 +39,7 @@ final class Model /** * @var ListItem */ - private $listItem; + private ListItem $listItem; /** * Constructor diff --git a/src/AnimeClient/API/CacheTrait.php b/src/AnimeClient/API/CacheTrait.php index 47d3db12..bc1e945d 100644 --- a/src/AnimeClient/API/CacheTrait.php +++ b/src/AnimeClient/API/CacheTrait.php @@ -26,7 +26,7 @@ trait CacheTrait { /** * @var Pool */ - protected $cache; + protected Pool $cache; /** * Inject the cache object diff --git a/src/AnimeClient/API/Kitsu/Auth.php b/src/AnimeClient/API/Kitsu/Auth.php index 2198eccd..3161e77c 100644 --- a/src/AnimeClient/API/Kitsu/Auth.php +++ b/src/AnimeClient/API/Kitsu/Auth.php @@ -42,14 +42,14 @@ final class Auth { * * @var Model */ - private $model; + private Model $model; /** * Session object * * @var Segment */ - private $segment; + private Segment $segment; /** * Constructor diff --git a/src/AnimeClient/API/Kitsu/KitsuRequestBuilder.php b/src/AnimeClient/API/Kitsu/KitsuRequestBuilder.php index b933328c..aa105062 100644 --- a/src/AnimeClient/API/Kitsu/KitsuRequestBuilder.php +++ b/src/AnimeClient/API/Kitsu/KitsuRequestBuilder.php @@ -25,14 +25,14 @@ final class KitsuRequestBuilder extends APIRequestBuilder { * The base url for api requests * @var string $base_url */ - protected $baseUrl = 'https://kitsu.io/api/edge/'; + protected string $baseUrl = 'https://kitsu.io/api/edge/'; /** * HTTP headers to send with every request * * @var array */ - protected $defaultHeaders = [ + protected array $defaultHeaders = [ 'User-Agent' => USER_AGENT, 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json', diff --git a/src/AnimeClient/API/Kitsu/KitsuTrait.php b/src/AnimeClient/API/Kitsu/KitsuTrait.php index 598ff0ea..8103f5cf 100644 --- a/src/AnimeClient/API/Kitsu/KitsuTrait.php +++ b/src/AnimeClient/API/Kitsu/KitsuTrait.php @@ -38,7 +38,7 @@ trait KitsuTrait { * The request builder for the Kitsu API * @var KitsuRequestBuilder */ - protected $requestBuilder; + protected KitsuRequestBuilder $requestBuilder; /** * Set the request builder object diff --git a/src/AnimeClient/API/Kitsu/Model.php b/src/AnimeClient/API/Kitsu/Model.php index 414131a7..6dee2400 100644 --- a/src/AnimeClient/API/Kitsu/Model.php +++ b/src/AnimeClient/API/Kitsu/Model.php @@ -65,27 +65,27 @@ final class Model { * * @var AnimeListTransformer */ - private $animeListTransformer; + private AnimeListTransformer $animeListTransformer; /** * @var AnimeTransformer */ - private $animeTransformer; + private AnimeTransformer $animeTransformer; /** * @var ListItem */ - private $listItem; + private ListItem $listItem; /** * @var MangaTransformer */ - private $mangaTransformer; + private MangaTransformer $mangaTransformer; /** * @var MangaListTransformer */ - private $mangaListTransformer; + private MangaListTransformer $mangaListTransformer; /** * Constructor diff --git a/src/AnimeClient/API/Kitsu/Transformer/AnimeListTransformer.php b/src/AnimeClient/API/Kitsu/Transformer/AnimeListTransformer.php index e4942909..5c0d8ff8 100644 --- a/src/AnimeClient/API/Kitsu/Transformer/AnimeListTransformer.php +++ b/src/AnimeClient/API/Kitsu/Transformer/AnimeListTransformer.php @@ -22,6 +22,7 @@ use Aviat\AnimeClient\Types\{ AnimeListItem }; use Aviat\Ion\Transformer\AbstractTransformer; +use Aviat\Ion\Type\StringType; /** * Transformer for anime list @@ -100,7 +101,7 @@ final class AnimeListTransformer extends AbstractTransformer { 'title' => $title, 'titles' => $titles, 'slug' => $anime['slug'], - 'show_type' => (string)$this->string($anime['subtype'])->upperCaseFirst(), + 'show_type' => (string)StringType::from($anime['subtype'])->upperCaseFirst(), 'cover_image' => $anime['posterImage']['small'], 'genres' => $genres, 'streaming_links' => $streamingLinks, diff --git a/src/AnimeClient/API/Kitsu/Transformer/AnimeTransformer.php b/src/AnimeClient/API/Kitsu/Transformer/AnimeTransformer.php index fc93827c..5a339567 100644 --- a/src/AnimeClient/API/Kitsu/Transformer/AnimeTransformer.php +++ b/src/AnimeClient/API/Kitsu/Transformer/AnimeTransformer.php @@ -19,6 +19,7 @@ namespace Aviat\AnimeClient\API\Kitsu\Transformer; use Aviat\AnimeClient\API\{JsonAPI, Kitsu}; use Aviat\AnimeClient\Types\AnimePage; use Aviat\Ion\Transformer\AbstractTransformer; +use Aviat\Ion\Type\StringType; /** * Transformer for anime description page @@ -114,7 +115,7 @@ final class AnimeTransformer extends AbstractTransformer { 'genres' => $item['genres'], 'id' => $item['id'], 'included' => $item['included'], - 'show_type' => (string)$this->string($item['showType'])->upperCaseFirst(), + 'show_type' => (string)StringType::from($item['showType'])->upperCaseFirst(), 'slug' => $item['slug'], 'staff' => $staff, 'status' => Kitsu::getAiringStatus($item['startDate'], $item['endDate']), diff --git a/src/AnimeClient/API/Kitsu/Transformer/MangaListTransformer.php b/src/AnimeClient/API/Kitsu/Transformer/MangaListTransformer.php index 83cc7d0a..e8b5570f 100644 --- a/src/AnimeClient/API/Kitsu/Transformer/MangaListTransformer.php +++ b/src/AnimeClient/API/Kitsu/Transformer/MangaListTransformer.php @@ -21,16 +21,13 @@ use Aviat\AnimeClient\Types\{ FormItem, FormItemData, MangaListItem, MangaListItemDetail }; -use Aviat\Ion\StringWrapper; use Aviat\Ion\Transformer\AbstractTransformer; +use Aviat\Ion\Type\StringType; /** * Data transformation class for zippered Hummingbird manga */ final class MangaListTransformer extends AbstractTransformer { - - use StringWrapper; - /** * Remap zipped anime data to a more logical form * @@ -103,7 +100,7 @@ final class MangaListTransformer extends AbstractTransformer { 'slug' => $manga['slug'], 'title' => $title, 'titles' => $titles, - 'type' => (string)$this->string($manga['subtype'])->upperCaseFirst(), + 'type' => (string)StringType::from($manga['subtype'])->upperCaseFirst(), 'url' => 'https://kitsu.io/manga/' . $manga['slug'], ]), 'reading_status' => $item['attributes']['status'], diff --git a/src/AnimeClient/API/ParallelAPIRequest.php b/src/AnimeClient/API/ParallelAPIRequest.php index 771006ba..83389c92 100644 --- a/src/AnimeClient/API/ParallelAPIRequest.php +++ b/src/AnimeClient/API/ParallelAPIRequest.php @@ -33,7 +33,7 @@ final class ParallelAPIRequest { * * @var array */ - private $requests = []; + private array $requests = []; /** * Add a request diff --git a/src/AnimeClient/Command/BaseCommand.php b/src/AnimeClient/Command/BaseCommand.php index 6fc64487..17e65b24 100644 --- a/src/AnimeClient/Command/BaseCommand.php +++ b/src/AnimeClient/Command/BaseCommand.php @@ -29,9 +29,9 @@ use Aviat\Ion\Config; use Aviat\Ion\Di\{Container, ContainerAware}; use ConsoleKit\{Command, ConsoleException}; use ConsoleKit\Widgets\Box; +use Laminas\Diactoros\{Response, ServerRequestFactory}; use Monolog\Handler\RotatingFileHandler; use Monolog\Logger; -use Zend\Diactoros\{Response, ServerRequestFactory}; /** * Base class for console command setup diff --git a/src/AnimeClient/Command/SyncLists.php b/src/AnimeClient/Command/SyncLists.php index e0c53da2..510cb352 100644 --- a/src/AnimeClient/Command/SyncLists.php +++ b/src/AnimeClient/Command/SyncLists.php @@ -44,13 +44,13 @@ final class SyncLists extends BaseCommand { * Model for making requests to Anilist API * @var AnilistModel */ - protected $anilistModel; + protected AnilistModel $anilistModel; /** * Model for making requests to Kitsu API * @var KitsuModel */ - protected $kitsuModel; + protected KitsuModel $kitsuModel; /** * Run the Kitsu <=> Anilist sync script diff --git a/src/AnimeClient/Command/UpdateThumbnails.php b/src/AnimeClient/Command/UpdateThumbnails.php index 909db166..8c2a3014 100644 --- a/src/AnimeClient/Command/UpdateThumbnails.php +++ b/src/AnimeClient/Command/UpdateThumbnails.php @@ -17,7 +17,7 @@ namespace Aviat\AnimeClient\Command; use Aviat\AnimeClient\API\JsonAPI; -use Aviat\AnimeClient\API\Kitsu\Model; +use Aviat\AnimeClient\API\Kitsu\Model as KitsuModel; use Aviat\AnimeClient\Controller\Images; /** @@ -27,14 +27,14 @@ use Aviat\AnimeClient\Controller\Images; final class UpdateThumbnails extends ClearThumbnails { /** * Model for making requests to Kitsu API - * @var Model + * @var KitsuModel */ - protected $kitsuModel; + protected KitsuModel $kitsuModel; /** * The default controller, which has the method to cache the images */ - protected $controller; + protected Images $controller; public function execute(array $args, array $options = []): void { diff --git a/src/AnimeClient/Controller.php b/src/AnimeClient/Controller.php index db726cb3..46ae7e4f 100644 --- a/src/AnimeClient/Controller.php +++ b/src/AnimeClient/Controller.php @@ -47,55 +47,55 @@ class Controller { * The authentication object * @var Auth $auth ; */ - protected $auth; + protected Auth $auth; /** * Cache manager * @var CacheItemPoolInterface */ - protected $cache; + protected CacheItemPoolInterface $cache; /** * The global configuration object * @var ConfigInterface $config */ - public $config; + public ConfigInterface $config; /** * Request object * @var ServerRequestInterface $request */ - protected $request; + protected ServerRequestInterface $request; /** * Response object * @var ResponseInterface $response */ - public $response; + public ResponseInterface $response; /** * Url generation class * @var UrlGenerator */ - protected $urlGenerator; + protected UrlGenerator $urlGenerator; /** * Aura url generator * @var Generator */ - protected $url; + protected Generator $url; /** * Session segment * @var Segment */ - protected $session; + protected Segment $session; /** * Common data to be sent to views * @var array */ - protected $baseData = []; + protected array $baseData = []; /** * Controller constructor. diff --git a/src/AnimeClient/Controller/Anime.php b/src/AnimeClient/Controller/Anime.php index a53ced6c..a3222530 100644 --- a/src/AnimeClient/Controller/Anime.php +++ b/src/AnimeClient/Controller/Anime.php @@ -21,6 +21,7 @@ use Aviat\AnimeClient\Controller as BaseController; use Aviat\AnimeClient\API\Kitsu\Transformer\AnimeListTransformer; use Aviat\AnimeClient\API\Enum\AnimeWatchingStatus\Kitsu as KitsuWatchingStatus; use Aviat\AnimeClient\API\Mapping\AnimeWatchingStatus; +use Aviat\AnimeClient\Model\Anime as AnimeModel; use Aviat\AnimeClient\Types\FormItem; use Aviat\Ion\Di\ContainerInterface; use Aviat\Ion\Di\Exception\ContainerException; @@ -37,9 +38,9 @@ final class Anime extends BaseController { /** * The anime list model - * @var \Aviat\AnimeClient\Model\Anime $model + * @var AnimeModel $model */ - protected $model; + protected AnimeModel $model; /** * Constructor diff --git a/src/AnimeClient/Controller/AnimeCollection.php b/src/AnimeClient/Controller/AnimeCollection.php index 62efaad7..f8650c27 100644 --- a/src/AnimeClient/Controller/AnimeCollection.php +++ b/src/AnimeClient/Controller/AnimeCollection.php @@ -38,13 +38,13 @@ final class AnimeCollection extends BaseController { * The anime collection model * @var AnimeCollectionModel $animeCollectionModel */ - private $animeCollectionModel; + private AnimeCollectionModel $animeCollectionModel; /** * The anime API model * @var AnimeModel $animeModel */ - private $animeModel; + private AnimeModel $animeModel; /** * Constructor diff --git a/src/AnimeClient/Controller/Character.php b/src/AnimeClient/Controller/Character.php index 84048b4c..755e6824 100644 --- a/src/AnimeClient/Controller/Character.php +++ b/src/AnimeClient/Controller/Character.php @@ -32,7 +32,7 @@ class Character extends BaseController { /** * @var Model */ - private $model; + private Model $model; /** * Character constructor. diff --git a/src/AnimeClient/Controller/Manga.php b/src/AnimeClient/Controller/Manga.php index de3e8550..190a6f3d 100644 --- a/src/AnimeClient/Controller/Manga.php +++ b/src/AnimeClient/Controller/Manga.php @@ -38,7 +38,7 @@ final class Manga extends Controller { * The manga model * @var MangaModel $model */ - protected $model; + protected MangaModel $model; /** * Constructor diff --git a/src/AnimeClient/Controller/People.php b/src/AnimeClient/Controller/People.php index 38adec25..d1718c5b 100644 --- a/src/AnimeClient/Controller/People.php +++ b/src/AnimeClient/Controller/People.php @@ -32,7 +32,7 @@ final class People extends BaseController { /** * @var Model */ - private $model; + private Model $model; /** * People constructor. diff --git a/src/AnimeClient/Controller/Settings.php b/src/AnimeClient/Controller/Settings.php index e44d7cda..c951d79a 100644 --- a/src/AnimeClient/Controller/Settings.php +++ b/src/AnimeClient/Controller/Settings.php @@ -17,8 +17,9 @@ namespace Aviat\AnimeClient\Controller; use Aura\Router\Exception\RouteNotFound; -use Aviat\AnimeClient\API\Anilist\Model; +use Aviat\AnimeClient\API\Anilist\Model as AnilistModel; use Aviat\AnimeClient\Controller as BaseController; +use Aviat\AnimeClient\Model\Settings as SettingsModel; use Aviat\Ion\Di\ContainerInterface; use Aviat\Ion\Di\Exception\ContainerException; use Aviat\Ion\Di\Exception\NotFoundException; @@ -29,14 +30,14 @@ use Aviat\Ion\Di\Exception\NotFoundException; final class Settings extends BaseController { /** - * @var Model + * @var AnilistModel */ - private $anilistModel; + private AnilistModel $anilistModel; /** - * @var \Aviat\AnimeClient\Model\Settings + * @var SettingsModel */ - private $settingsModel; + private SettingsModel $settingsModel; /** * Settings constructor. diff --git a/src/AnimeClient/Controller/User.php b/src/AnimeClient/Controller/User.php index b00fc9b7..7237ac38 100644 --- a/src/AnimeClient/Controller/User.php +++ b/src/AnimeClient/Controller/User.php @@ -32,7 +32,7 @@ final class User extends BaseController { /** * @var Model */ - private $kitsuModel; + private Model $kitsuModel; /** * User constructor. diff --git a/src/AnimeClient/Dispatcher.php b/src/AnimeClient/Dispatcher.php index 3178744d..ecb650a3 100644 --- a/src/AnimeClient/Dispatcher.php +++ b/src/AnimeClient/Dispatcher.php @@ -18,13 +18,12 @@ namespace Aviat\AnimeClient; use function Aviat\Ion\_dir; -use Aura\Router\{Matcher, Route, Rule}; +use Aura\Router\{Map, Matcher, Route, Rule}; use Aviat\AnimeClient\API\FailedResponseException; use Aviat\Ion\Di\ContainerInterface; use Aviat\Ion\Friend; -use Aviat\Ion\StringWrapper; - +use Aviat\Ion\Type\StringType; use LogicException; use ReflectionException; @@ -33,31 +32,29 @@ use ReflectionException; */ final class Dispatcher extends RoutingBase { - use StringWrapper; - /** * The route-matching object - * @var object $router + * @var Map $router */ - protected $router; + protected Map $router; /** * The route matcher * @var Matcher $matcher */ - protected $matcher; + protected Matcher $matcher; /** * Routing array * @var array */ - protected $routes; + protected array $routes; /** * Routes added to router * @var array $outputRoutes */ - protected $outputRoutes; + protected array $outputRoutes; /** * Constructor @@ -254,7 +251,7 @@ final class Dispatcher extends RoutingBase { foreach ($classFiles as $file) { $rawClassName = basename(str_replace('.php', '', $file)); - $path = (string)$this->string($rawClassName)->dasherize(); + $path = (string)StringType::from($rawClassName)->dasherize(); $className = trim($defaultNamespace . '\\' . $rawClassName, '\\'); $controllers[$path] = $className; diff --git a/src/AnimeClient/FormGenerator.php b/src/AnimeClient/FormGenerator.php index fe04838f..b6e9cd4f 100644 --- a/src/AnimeClient/FormGenerator.php +++ b/src/AnimeClient/FormGenerator.php @@ -30,7 +30,7 @@ final class FormGenerator { * * @var HelperLocator */ - private $helper; + private HelperLocator $helper; /** * FormGenerator constructor. @@ -93,6 +93,9 @@ final class FormGenerator { $params['type'] = 'select'; $params['options'] = array_flip($form['options']); break; + + default: + break; } foreach (['readonly', 'disabled'] as $key) diff --git a/src/AnimeClient/MenuGenerator.php b/src/AnimeClient/MenuGenerator.php index 3696f230..a42a9787 100644 --- a/src/AnimeClient/MenuGenerator.php +++ b/src/AnimeClient/MenuGenerator.php @@ -16,11 +16,12 @@ namespace Aviat\AnimeClient; -use Aviat\Ion\{ArrayWrapper, StringWrapper}; use Aviat\Ion\Di\Exception\{ContainerException, NotFoundException}; use Aura\Html\HelperLocator; use Aviat\Ion\Di\ContainerInterface; use Aviat\Ion\Exception\ConfigException; +use Aviat\Ion\Type\ArrayType; +use Aviat\Ion\Type\StringType; use Psr\Http\Message\RequestInterface; /** @@ -28,22 +29,19 @@ use Psr\Http\Message\RequestInterface; */ final class MenuGenerator extends UrlGenerator { - use ArrayWrapper; - use StringWrapper; - /** * Html generation helper * * @var HelperLocator */ - protected $helper; + protected HelperLocator $helper; /** * Request object * * @var RequestInterface */ - protected $request; + protected RequestInterface $request; /** * MenuGenerator constructor. @@ -74,8 +72,8 @@ final class MenuGenerator extends UrlGenerator { $parsed[$name] = []; foreach ($menu['items'] as $pathName => $partialPath) { - $title = (string)$this->string($pathName)->humanize()->titleize(); - $parsed[$name][$title] = (string)$this->string($menu['route_prefix'])->append($partialPath); + $title = (string)StringType::from($pathName)->humanize()->titleize(); + $parsed[$name][$title] = (string)StringType::from($menu['route_prefix'])->append($partialPath); } } @@ -95,7 +93,7 @@ final class MenuGenerator extends UrlGenerator { $parsedConfig = $this->parseConfig($menus); // Bail out early on invalid menu - if ( ! $this->arr($parsedConfig)->hasKey($menu)) + if ( ! ArrayType::from($parsedConfig)->hasKey($menu)) { return ''; } @@ -104,7 +102,7 @@ final class MenuGenerator extends UrlGenerator { foreach ($menuConfig as $title => $path) { - $has = $this->string($this->path())->contains($path); + $has = StringType::from($this->path())->contains($path); $selected = ($has && mb_strlen($this->path()) >= mb_strlen($path)); $link = $this->helper->a($this->url($path), $title); diff --git a/src/AnimeClient/Model/Anime.php b/src/AnimeClient/Model/Anime.php index 55d31726..ab055376 100644 --- a/src/AnimeClient/Model/Anime.php +++ b/src/AnimeClient/Model/Anime.php @@ -40,21 +40,21 @@ class Anime extends API { * * @var boolean */ - protected $anilistEnabled; + protected bool $anilistEnabled; /** * Model for making requests to Anilist API * * @var AnilistModel */ - protected $anilistModel; + protected AnilistModel $anilistModel; /** * Model for making requests to Kitsu API * * @var KitsuModel */ - protected $kitsuModel; + protected KitsuModel $kitsuModel; /** * Anime constructor. diff --git a/src/AnimeClient/Model/AnimeCollection.php b/src/AnimeClient/Model/AnimeCollection.php index f2322c08..33cf0d30 100644 --- a/src/AnimeClient/Model/AnimeCollection.php +++ b/src/AnimeClient/Model/AnimeCollection.php @@ -29,7 +29,7 @@ final class AnimeCollection extends Collection { * Anime API Model * @var Anime $animeModel */ - protected $animeModel; + protected Anime $animeModel; /** * Create the collection model diff --git a/src/AnimeClient/Model/Collection.php b/src/AnimeClient/Model/Collection.php index 5cb1c032..b44cb196 100644 --- a/src/AnimeClient/Model/Collection.php +++ b/src/AnimeClient/Model/Collection.php @@ -31,13 +31,13 @@ class Collection extends DB { * The query builder object * @var Query_Builder_Interface */ - protected $db; + protected Query_Builder_Interface $db; /** * Whether the database is valid for querying * @var boolean */ - protected $validDatabase = FALSE; + protected bool $validDatabase = FALSE; /** * Create a new collection object diff --git a/src/AnimeClient/Model/Manga.php b/src/AnimeClient/Model/Manga.php index 61116861..baddff43 100644 --- a/src/AnimeClient/Model/Manga.php +++ b/src/AnimeClient/Model/Manga.php @@ -26,6 +26,7 @@ use Aviat\AnimeClient\Types\{ MangaListItem, MangaPage }; +use Aviat\AnimeClient\API\{Anilist, Kitsu}; use Aviat\Ion\Di\ContainerInterface; use Aviat\Ion\Json; @@ -40,19 +41,19 @@ class Manga extends API { * * @var boolean */ - protected $anilistEnabled; + protected bool $anilistEnabled; /** * Model for making requests to the Anilist API - * @var \Aviat\AnimeClient\API\Anilist\Model + * @var Anilist\Model */ - protected $anilistModel; + protected Anilist\Model $anilistModel; /** * Model for making requests to Kitsu API - * @var \Aviat\AnimeClient\API\Kitsu\Model + * @var Kitsu\Model */ - protected $kitsuModel; + protected Kitsu\Model $kitsuModel; /** * Constructor diff --git a/src/AnimeClient/Model/Settings.php b/src/AnimeClient/Model/Settings.php index a1beec2c..d9f76ce8 100644 --- a/src/AnimeClient/Model/Settings.php +++ b/src/AnimeClient/Model/Settings.php @@ -25,16 +25,14 @@ use Aviat\AnimeClient\Types\{Config, UndefinedPropertyException}; use Aviat\Ion\ConfigInterface; use Aviat\Ion\Di\ContainerAware; -use Aviat\Ion\StringWrapper; /** * Model for handling settings control panel */ final class Settings { use ContainerAware; - use StringWrapper; - private $config; + private ConfigInterface $config; public function __construct(ConfigInterface $config) { diff --git a/src/AnimeClient/RoutingBase.php b/src/AnimeClient/RoutingBase.php index ea55207e..de9e250f 100644 --- a/src/AnimeClient/RoutingBase.php +++ b/src/AnimeClient/RoutingBase.php @@ -16,38 +16,36 @@ namespace Aviat\AnimeClient; -use Aviat\Ion\Config; +use Aviat\Ion\ConfigInterface; use Aviat\Ion\Di\ContainerInterface; use Aviat\Ion\Di\Exception\ContainerException; use Aviat\Ion\Di\Exception\NotFoundException; use Aviat\Ion\Exception\ConfigException; -use Aviat\Ion\StringWrapper; -use Psr\Http\Message\ServerRequestInterface; +use Aviat\Ion\Type\StringType; +use Psr\Http\Message\RequestInterface; /** * Base for routing/url classes */ class RoutingBase { - use StringWrapper; - /** * Injection Container * @var ContainerInterface $container */ - protected $container; + protected ContainerInterface $container; /** * Config Object - * @var Config + * @var ConfigInterface */ - protected $config; + protected ConfigInterface $config; /** * Class wrapper for input superglobals - * @var ServerRequestInterface + * @var RequestInterface */ - protected $request; + protected RequestInterface $request; /** * Constructor @@ -73,7 +71,7 @@ class RoutingBase { public function path(): string { $path = $this->request->getUri()->getPath(); - $cleanedPath = $this->string($path) + $cleanedPath = StringType::from($path) ->replace('%20', '') ->trim() ->trimRight('/') diff --git a/src/AnimeClient/UrlGenerator.php b/src/AnimeClient/UrlGenerator.php index c8edb2b5..ccf8b179 100644 --- a/src/AnimeClient/UrlGenerator.php +++ b/src/AnimeClient/UrlGenerator.php @@ -30,7 +30,7 @@ class UrlGenerator extends RoutingBase { * The current HTTP host * @var string */ - protected $host; + protected string $host; /** * Constructor @@ -49,7 +49,7 @@ class UrlGenerator extends RoutingBase { /** * Get the base url for css/js/images * - * @param string ...$args + * @param array $args * @return string */ public function assetUrl(string ...$args): string diff --git a/src/AnimeClient/Util.php b/src/AnimeClient/Util.php index f29af0ba..7e4d6f37 100644 --- a/src/AnimeClient/Util.php +++ b/src/AnimeClient/Util.php @@ -30,7 +30,7 @@ class Util { * Routes that don't require a second navigation level * @var array */ - private static $formPages = [ + private static array $formPages = [ 'edit', 'add', 'update', diff --git a/src/Ion/ArrayWrapper.php b/src/Ion/ArrayWrapper.php deleted file mode 100644 index 86288895..00000000 --- a/src/Ion/ArrayWrapper.php +++ /dev/null @@ -1,38 +0,0 @@ - - * @copyright 2015 - 2020 Timothy J. Warren - * @license http://www.opensource.org/licenses/mit-license.html MIT License - * @version 5 - * @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient - */ - -namespace Aviat\Ion; - -use Aviat\Ion\Type\ArrayType; - -/** - * Wrapper to shortcut creating ArrayType objects - */ -trait ArrayWrapper { - - /** - * Convenience method for wrapping an array - * with the array type class - * - * @param array $arr - * @return ArrayType - */ - public function arr(array $arr): ArrayType - { - return new ArrayType($arr); - } -} -// End of ArrayWrapper.php \ No newline at end of file diff --git a/src/Ion/Config.php b/src/Ion/Config.php index 0efa4cf1..7e2f6b8e 100644 --- a/src/Ion/Config.php +++ b/src/Ion/Config.php @@ -25,14 +25,12 @@ use InvalidArgumentException; */ class Config implements ConfigInterface { - use ArrayWrapper; - /** * Config object * * @var ArrayType */ - protected $map; + protected ArrayType $map; /** * Constructor @@ -41,7 +39,7 @@ class Config implements ConfigInterface { */ public function __construct(array $configArray = []) { - $this->map = $this->arr($configArray); + $this->map = ArrayType::from($configArray); } /** diff --git a/src/Ion/Model.php b/src/Ion/Model.php index 7ae03591..ab586b88 100644 --- a/src/Ion/Model.php +++ b/src/Ion/Model.php @@ -20,6 +20,5 @@ namespace Aviat\Ion; * Common base for all Models */ class Model { - use StringWrapper; } // End of Model.php diff --git a/src/Ion/Model/DB.php b/src/Ion/Model/DB.php deleted file mode 100644 index a77ce12e..00000000 --- a/src/Ion/Model/DB.php +++ /dev/null @@ -1,55 +0,0 @@ - - * @copyright 2015 - 2020 Timothy J. Warren - * @license http://www.opensource.org/licenses/mit-license.html MIT License - * @version 5 - * @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient - */ - -namespace Aviat\Ion\Model; - -use Aviat\Ion\ConfigInterface; -use Aviat\Ion\Model as BaseModel; - -/** - * Base model for database interaction - */ -class DB extends BaseModel { - /** - * The query builder object - * @var object $db - */ - protected $db; - - /** - * The config manager - * @var ConfigInterface - */ - protected $config; - - /** - * The database connection information array - * @var array $db_config - */ - protected $db_config; - - /** - * Constructor - * - * @param ConfigInterface $config - */ - public function __construct(ConfigInterface $config) - { - $this->config = $config; - $this->db_config = (array)$config->get('database'); - } -} -// End of DB.php diff --git a/src/Ion/StringWrapper.php b/src/Ion/StringWrapper.php deleted file mode 100644 index 092c5666..00000000 --- a/src/Ion/StringWrapper.php +++ /dev/null @@ -1,38 +0,0 @@ - - * @copyright 2015 - 2020 Timothy J. Warren - * @license http://www.opensource.org/licenses/mit-license.html MIT License - * @version 5 - * @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient - */ - -namespace Aviat\Ion; - -use Aviat\Ion\Type\StringType; - -/** - * Trait to add convenience method for creating StringType objects - */ -trait StringWrapper { - - /** - * Wrap the String in the Stringy class - * - * @param string $str - * @throws \InvalidArgumentException - * @return StringType - */ - public function string($str): StringType - { - return StringType::create($str); - } -} -// End of StringWrapper.php \ No newline at end of file diff --git a/src/Ion/Transformer/AbstractTransformer.php b/src/Ion/Transformer/AbstractTransformer.php index ea331b56..19076914 100644 --- a/src/Ion/Transformer/AbstractTransformer.php +++ b/src/Ion/Transformer/AbstractTransformer.php @@ -16,17 +16,12 @@ namespace Aviat\Ion\Transformer; -use Aviat\Ion\StringWrapper; - use BadMethodCallException; /** * Base class for data transformation */ abstract class AbstractTransformer implements TransformerInterface { - - use StringWrapper; - /** * Mutate the data structure * diff --git a/src/Ion/Type/ArrayType.php b/src/Ion/Type/ArrayType.php index bab03c61..21bc849c 100644 --- a/src/Ion/Type/ArrayType.php +++ b/src/Ion/Type/ArrayType.php @@ -32,14 +32,14 @@ class ArrayType { * * @var array */ - protected $arr; + protected array $arr; /** * Map generated methods to their native implementations * * @var array */ - protected $nativeMethods = [ + protected array $nativeMethods = [ 'chunk' => 'array_chunk', 'diff' => 'array_diff', 'filter' => 'array_filter', @@ -64,7 +64,7 @@ class ArrayType { * * @var array */ - protected $nativeInPlaceMethods = [ + protected array $nativeInPlaceMethods = [ 'shuffle' => 'shuffle', 'shift' => 'array_shift', 'unshift' => 'array_unshift', @@ -72,12 +72,23 @@ class ArrayType { 'pop' => 'array_pop', ]; + /** + * Create an ArrayType wrapper class from an array + * + * @param array $arr + * @return ArrayType + */ + public static function from(array $arr): ArrayType + { + return new ArrayType($arr); + } + /** * Create an ArrayType wrapper class * * @param array $arr */ - public function __construct(array &$arr) + private function __construct(array &$arr) { $this->arr =& $arr; } @@ -227,7 +238,7 @@ class ArrayType { /** * Return a reference to the value of an arbitrary key on the array * - * @example $arr = new ArrayType([0 => ['data' => ['foo' => 'bar']]]); + * @example $arr = ArrayType::from([0 => ['data' => ['foo' => 'bar']]]); * $val = $arr->getDeepKey([0, 'data', 'foo']); * // returns 'bar' * @param array $key An array of keys of the array diff --git a/src/Ion/Type/StringType.php b/src/Ion/Type/StringType.php index a7ade2d4..9e280cd3 100644 --- a/src/Ion/Type/StringType.php +++ b/src/Ion/Type/StringType.php @@ -23,6 +23,17 @@ use Stringy\Stringy; */ class StringType extends Stringy { + /** + * Alias for `create` static constructor + * + * @param string $str + * @return $this + */ + public static function from(string $str): self + { + return self::create($str); + } + /** * See if two strings match, despite being delimited differently, * such as camelCase, PascalCase, kebab-case, or snake_case. diff --git a/src/Ion/View.php b/src/Ion/View.php index f98c16ce..796f0663 100644 --- a/src/Ion/View.php +++ b/src/Ion/View.php @@ -29,14 +29,13 @@ abstract class View implements ViewInterface { use Di\ContainerAware; - use StringWrapper; /** * HTTP response Object * * @var ResponseInterface */ - public $response; + public ResponseInterface $response; /** * If the view has sent output via @@ -44,7 +43,7 @@ abstract class View * * @var boolean */ - protected $hasRendered = FALSE; + protected bool $hasRendered = FALSE; /** * Constructor diff --git a/tests/AnimeClient/API/APIRequestBuilderTest.php b/tests/AnimeClient/API/APIRequestBuilderTest.php index a73dff08..a271f236 100644 --- a/tests/AnimeClient/API/APIRequestBuilderTest.php +++ b/tests/AnimeClient/API/APIRequestBuilderTest.php @@ -30,9 +30,9 @@ class APIRequestBuilderTest extends TestCase { public function setUp(): void { $this->builder = new class extends APIRequestBuilder { - protected $baseUrl = 'https://httpbin.org/'; + protected string $baseUrl = 'https://httpbin.org/'; - protected $defaultHeaders = ['User-Agent' => "Tim's Anime Client Testsuite / 4.0"]; + protected array $defaultHeaders = ['User-Agent' => "Tim's Anime Client Testsuite / 4.0"]; }; $this->builder->setLogger(new NullLogger); diff --git a/tests/Ion/Di/ContainerAwareTest.php b/tests/Ion/Di/ContainerAwareTest.php index a8d752f4..ad51de10 100644 --- a/tests/Ion/Di/ContainerAwareTest.php +++ b/tests/Ion/Di/ContainerAwareTest.php @@ -31,7 +31,7 @@ class Aware { class ContainerAwareTest extends IonTestCase { - protected $aware; + protected Aware $aware; public function setUp(): void { diff --git a/tests/Ion/IonTestCase.php b/tests/Ion/IonTestCase.php index 6d30b374..e05fd553 100644 --- a/tests/Ion/IonTestCase.php +++ b/tests/Ion/IonTestCase.php @@ -18,6 +18,7 @@ namespace Aviat\Ion\Tests; use function Aviat\Ion\_dir; +use Aviat\Ion\Di\ContainerInterface; use PHPUnit\Framework\TestCase; use Laminas\Diactoros\ServerRequestFactory; @@ -31,7 +32,7 @@ class IonTestCase extends TestCase { public const TEST_DATA_DIR = __DIR__ . '/test_data'; public const TEST_VIEW_DIR = __DIR__ . '/test_views'; - protected $container; + protected ContainerInterface $container; protected static $staticContainer; protected static $session_handler; diff --git a/tests/Ion/Model/BaseDBModelTest.php b/tests/Ion/Model/BaseDBModelTest.php deleted file mode 100644 index 29cbcb5c..00000000 --- a/tests/Ion/Model/BaseDBModelTest.php +++ /dev/null @@ -1,29 +0,0 @@ - - * @copyright 2015 - 2020 Timothy J. Warren - * @license http://www.opensource.org/licenses/mit-license.html MIT License - * @version 5 - * @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient - */ - -namespace Aviat\Ion\Tests\Model; - -use Aviat\Ion\Model\DB as BaseDBModel; -use Aviat\Ion\Tests\IonTestCase; - -class BaseDBModelTest extends IonTestCase { - - public function testBaseDBModelSanity() - { - $baseDBModel = new BaseDBModel($this->container->get('config')); - $this->assertTrue(is_object($baseDBModel)); - } -} \ No newline at end of file diff --git a/tests/Ion/StringWrapperTest.php b/tests/Ion/StringWrapperTest.php deleted file mode 100644 index fd9743ec..00000000 --- a/tests/Ion/StringWrapperTest.php +++ /dev/null @@ -1,39 +0,0 @@ - - * @copyright 2015 - 2020 Timothy J. Warren - * @license http://www.opensource.org/licenses/mit-license.html MIT License - * @version 5 - * @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient - */ - -namespace Aviat\Ion\Tests; - -use Aviat\Ion\StringWrapper; -use Aviat\Ion\Type\StringType; -use PHPUnit\Framework\TestCase; - -class StringWrapperTest extends TestCase { - - protected $wrapper; - - public function setUp(): void { - $this->wrapper = new class { - use StringWrapper; - }; - } - - public function testString() - { - $str = $this->wrapper->string('foo'); - $this->assertInstanceOf(StringType::class, $str); - } - -} \ No newline at end of file diff --git a/tests/Ion/Type/ArrayTypeTest.php b/tests/Ion/Type/ArrayTypeTest.php index e91dd6cb..7c127e34 100644 --- a/tests/Ion/Type/ArrayTypeTest.php +++ b/tests/Ion/Type/ArrayTypeTest.php @@ -16,16 +16,10 @@ namespace Aviat\Ion\Tests\Type; -use Aviat\Ion\ArrayWrapper; +use Aviat\Ion\Type\ArrayType; use Aviat\Ion\Tests\IonTestCase; class ArrayTypeTest extends IonTestCase { - use ArrayWrapper; - - public function setUp(): void { - parent::setUp(); - } - public function dataCall() { $method_map = [ @@ -88,33 +82,37 @@ class ArrayTypeTest extends IonTestCase { * Test the array methods defined for the __Call method * * @dataProvider dataCall + * @param string $method + * @param array $array + * @param array $args + * @param $expected */ - public function testCall($method, $array, $args, $expected) + public function testCall(string $method, array $array, array $args, $expected): void { - $obj = $this->arr($array); + $obj = ArrayType::from($array); $actual = $obj->__call($method, $args); $this->assertEquals($expected, $actual); } - public function testSet() + public function testSet(): void { - $obj = $this->arr([]); + $obj = ArrayType::from([]); $arraytype = $obj->set('foo', 'bar'); - $this->assertInstanceOf('Aviat\Ion\Type\ArrayType', $arraytype); + $this->assertInstanceOf(ArrayType::class, $arraytype); $this->assertEquals('bar', $obj->get('foo')); } - public function testGet() + public function testGet(): void { $array = [1, 2, 3, 4, 5]; - $obj = $this->arr($array); + $obj = ArrayType::from($array); $this->assertEquals($array, $obj->get()); $this->assertEquals(1, $obj->get(0)); $this->assertEquals(5, $obj->get(4)); } - public function testGetDeepKey() + public function testGetDeepKey(): void { $arr = [ 'foo' => 'bar', @@ -122,14 +120,14 @@ class ArrayTypeTest extends IonTestCase { 'bar' => 'foobar' ] ]; - $obj = $this->arr($arr); + $obj = ArrayType::from($arr); $this->assertEquals('foobar', $obj->getDeepKey(['baz', 'bar'])); $this->assertNull($obj->getDeepKey(['foo', 'bar', 'baz'])); } - public function testMap() + public function testMap(): void { - $obj = $this->arr([1, 2, 3]); + $obj = ArrayType::from([1, 2, 3]); $actual = $obj->map(function($item) { return $item * 2; }); @@ -137,9 +135,9 @@ class ArrayTypeTest extends IonTestCase { $this->assertEquals([2, 4, 6], $actual); } - public function testBadCall() + public function testBadCall(): void { - $obj = $this->arr([]); + $obj = ArrayType::from([]); $this->expectException('InvalidArgumentException'); $this->expectExceptionMessage("Method 'foo' does not exist"); @@ -147,20 +145,20 @@ class ArrayTypeTest extends IonTestCase { $obj->foo(); } - public function testShuffle() + public function testShuffle(): void { $original = [1, 2, 3, 4]; $test = [1, 2, 3, 4]; - $obj = $this->arr($test); + $obj = ArrayType::from($test); $actual = $obj->shuffle(); //$this->assertNotEquals($actual, $original); $this->assertTrue(is_array($actual)); } - public function testHasKey() + public function testHasKey(): void { - $obj = $this->arr([ + $obj = ArrayType::from([ 'a' => 'b', 'z' => 'y' ]); @@ -168,9 +166,9 @@ class ArrayTypeTest extends IonTestCase { $this->assertFalse($obj->hasKey('b')); } - public function testHasKeyArray() + public function testHasKeyArray(): void { - $obj = $this->arr([ + $obj = ArrayType::from([ 'foo' => [ 'bar' => [ 'baz' => [ @@ -191,23 +189,23 @@ class ArrayTypeTest extends IonTestCase { $this->assertFalse($obj->hasKey(['bar', 'baz'])); } - public function testHas() + public function testHas(): void { - $obj = $this->arr([1, 2, 6, 8, 11]); + $obj = ArrayType::from([1, 2, 6, 8, 11]); $this->assertTrue($obj->has(8)); $this->assertFalse($obj->has(8745)); } - public function testSearch() + public function testSearch(): void { - $obj = $this->arr([1, 2, 5, 7, 47]); + $obj = ArrayType::from([1, 2, 5, 7, 47]); $actual = $obj->search(47); $this->assertEquals(4, $actual); } - public function testFill() + public function testFill(): void { - $obj = $this->arr([]); + $obj = ArrayType::from([]); $expected = ['?', '?', '?']; $actual = $obj->fill(0, 3, '?'); $this->assertEquals($actual, $expected); diff --git a/tests/Ion/Type/StringTypeTest.php b/tests/Ion/Type/StringTypeTest.php index f12bc45e..44d4f2f9 100644 --- a/tests/Ion/Type/StringTypeTest.php +++ b/tests/Ion/Type/StringTypeTest.php @@ -16,14 +16,12 @@ namespace Aviat\Ion\Tests\Type; -use Aviat\Ion\StringWrapper; +use Aviat\Ion\Type\StringType; use Aviat\Ion\Tests\IonTestCase; class StringTypeTest extends IonTestCase { - use StringWrapper; - - public function dataFuzzyCaseMatch() + public function dataFuzzyCaseMatch(): array { return [ 'space separated' => [ @@ -56,10 +54,13 @@ class StringTypeTest extends IonTestCase { /** * @dataProvider dataFuzzyCaseMatch + * @param string $str1 + * @param string $str2 + * @param bool $expected */ - public function testFuzzyCaseMatch($str1, $str2, $expected) + public function testFuzzyCaseMatch(string $str1, string $str2, bool $expected): void { - $actual = $this->string($str1)->fuzzyCaseMatch($str2); + $actual = StringType::from($str1)->fuzzyCaseMatch($str2); $this->assertEquals($expected, $actual); }