Version 5.1 - All the GraphQL #32

Closed
timw4mail wants to merge 1160 commits from develop into master
35 changed files with 83 additions and 134 deletions
Showing only changes of commit 73a69e42d3 - Show all commits

View File

@ -9,8 +9,8 @@ use ConsoleKit\Console;
$GLOBALS['_SERVER']['HTTP_HOST'] = 'localhost'; $GLOBALS['_SERVER']['HTTP_HOST'] = 'localhost';
define('APP_DIR', __DIR__ . '/app'); const APP_DIR = __DIR__ . '/app';
define('TEMPLATE_DIR', APP_DIR . '/templates'); const TEMPLATE_DIR = APP_DIR . '/templates';
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// Start console script // Start console script

View File

@ -25,7 +25,7 @@ setlocale(LC_CTYPE, 'en_US');
// Load composer autoloader // Load composer autoloader
require_once __DIR__ . '/vendor/autoload.php'; require_once __DIR__ . '/vendor/autoload.php';
Debugger::$strictMode = E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED; // all errors except deprecated notices Debugger::$strictMode = E_ALL & ~E_DEPRECATED; // all errors except deprecated notices
Debugger::$showBar = false; Debugger::$showBar = false;
Debugger::enable(Debugger::DEVELOPMENT, __DIR__ . '/app/logs'); Debugger::enable(Debugger::DEVELOPMENT, __DIR__ . '/app/logs');

View File

@ -154,7 +154,7 @@ abstract class APIRequestBuilder {
* Set a request header * Set a request header
* *
* @param string $name * @param string $name
* @param string $value * @param string|null $value
* @return self * @return self
*/ */
public function setHeader(string $name, string $value = NULL): self public function setHeader(string $name, string $value = NULL): self

View File

@ -70,7 +70,7 @@ abstract class AbstractListItem {
* Delete a list item * Delete a list item
* *
* @param string $id - The id of the list item to delete * @param string $id - The id of the list item to delete
* @return Request * @return Request|null
*/ */
abstract public function delete(string $id):?Request; abstract public function delete(string $id):?Request;
} }

View File

@ -207,7 +207,7 @@ final class Model
* *
* @param FormItem $data * @param FormItem $data
* @param string $type - Them media type (anime/manga) * @param string $type - Them media type (anime/manga)
* @return Request * @return Request|null
*/ */
public function incrementListItem(FormItem $data, string $type): ?Request public function incrementListItem(FormItem $data, string $type): ?Request
{ {
@ -225,7 +225,7 @@ final class Model
* *
* @param FormItem $data * @param FormItem $data
* @param string $type - Them media type (anime/manga) * @param string $type - Them media type (anime/manga)
* @return Request * @return Request|null
*/ */
public function updateListItem(FormItem $data, string $type): ?Request public function updateListItem(FormItem $data, string $type): ?Request
{ {
@ -244,7 +244,7 @@ final class Model
* *
* @param string $malId - The id of the list item to remove * @param string $malId - The id of the list item to remove
* @param string $type - Them media type (anime/manga) * @param string $type - Them media type (anime/manga)
* @return Request * @return Request|null
*/ */
public function deleteListItem(string $malId, string $type): ?Request public function deleteListItem(string $malId, string $type): ?Request
{ {
@ -262,7 +262,7 @@ final class Model
* *
* @param string $malId * @param string $malId
* @param string $type - The media type (anime/manga) * @param string $type - The media type (anime/manga)
* @return string * @return string|null
*/ */
public function getListIdFromMalId(string $malId, string $type): ?string public function getListIdFromMalId(string $malId, string $type): ?string
{ {
@ -306,7 +306,7 @@ final class Model
* *
* @param string $malId * @param string $malId
* @param string $type * @param string $type
* @return string * @return string|null
*/ */
private function getMediaIdFromMalId(string $malId, string $type = 'ANIME'): ?string private function getMediaIdFromMalId(string $malId, string $type = 'ANIME'): ?string
{ {

View File

@ -257,24 +257,18 @@ final class RequestBuilder extends APIRequestBuilder {
$validResponseCodes = [200, 201]; $validResponseCodes = [200, 201];
$logger = $this->container->getLogger('anilist-request'); $logger = $this->container->getLogger('anilist-request');
if ($logger !== NULL) $logger?->debug('Anilist response', [
{
$logger->debug('Anilist response', [
'status' => $response->getStatus(), 'status' => $response->getStatus(),
'reason' => $response->getReason(), 'reason' => $response->getReason(),
'body' => $response->getBody(), 'body' => $response->getBody(),
'headers' => $response->getHeaders(), 'headers' => $response->getHeaders(),
//'requestHeaders' => $request->getHeaders(), //'requestHeaders' => $request->getHeaders(),
]); ]);
}
if ( ! \in_array($response->getStatus(), $validResponseCodes, TRUE)) if ( ! \in_array($response->getStatus(), $validResponseCodes, TRUE))
{ {
if ($logger !== NULL) $logger?->warning('Non 200 response for POST api call', (array)$response->getBody());
{
$logger->warning('Non 200 response for POST api call', (array)$response->getBody());
}
} }
$rawBody = wait($response->getBody()->buffer()); $rawBody = wait($response->getBody()->buffer());

View File

@ -24,6 +24,7 @@ use Aviat\AnimeClient\Types\{AnimeListItem, FormItem};
use Aviat\Ion\Transformer\AbstractTransformer; use Aviat\Ion\Transformer\AbstractTransformer;
use DateTime; use DateTime;
use DateTimeInterface;
class AnimeListTransformer extends AbstractTransformer { class AnimeListTransformer extends AbstractTransformer {
@ -57,7 +58,7 @@ class AnimeListTransformer extends AbstractTransformer {
: AnimeWatchingStatus::ANILIST_TO_KITSU[$item['status']], : AnimeWatchingStatus::ANILIST_TO_KITSU[$item['status']],
'updatedAt' => (new DateTime()) 'updatedAt' => (new DateTime())
->setTimestamp($item['updatedAt']) ->setTimestamp($item['updatedAt'])
->format(DateTime::W3C) ->format(DateTimeInterface::W3C)
], ],
]); ]);
} }

View File

@ -25,6 +25,7 @@ use Aviat\AnimeClient\Types\FormItem;
use Aviat\Ion\Transformer\AbstractTransformer; use Aviat\Ion\Transformer\AbstractTransformer;
use DateTime; use DateTime;
use DateTimeInterface;
class MangaListTransformer extends AbstractTransformer { class MangaListTransformer extends AbstractTransformer {
@ -58,7 +59,7 @@ class MangaListTransformer extends AbstractTransformer {
: MangaReadingStatus::ANILIST_TO_KITSU[$item['status']], : MangaReadingStatus::ANILIST_TO_KITSU[$item['status']],
'updatedAt' => (new DateTime()) 'updatedAt' => (new DateTime())
->setTimestamp($item['updatedAt']) ->setTimestamp($item['updatedAt'])
->format(DateTime::W3C), ->format(DateTimeInterface::W3C),
] ]
]); ]);
} }

View File

@ -19,10 +19,8 @@ namespace Aviat\AnimeClient\API\Anilist\Types;
use Aviat\AnimeClient\Types\AbstractType; use Aviat\AnimeClient\Types\AbstractType;
class MediaListEntry extends AbstractType { class MediaListEntry extends AbstractType {
/**
* @var int|string public int|string $id;
*/
public $id;
public ?string $notes; public ?string $notes;

View File

@ -17,7 +17,6 @@
namespace Aviat\AnimeClient\API; namespace Aviat\AnimeClient\API;
use Psr\SimpleCache\CacheInterface; use Psr\SimpleCache\CacheInterface;
use Psr\SimpleCache\InvalidArgumentException;
/** /**
* Helper methods for dealing with the Cache * Helper methods for dealing with the Cache

View File

@ -23,7 +23,6 @@ use const Aviat\AnimeClient\SESSION_SEGMENT;
use Aviat\AnimeClient\Kitsu as K; use Aviat\AnimeClient\Kitsu as K;
use Aviat\AnimeClient\API\CacheTrait; use Aviat\AnimeClient\API\CacheTrait;
use Aviat\Ion\Di\{ContainerAware, ContainerInterface}; use Aviat\Ion\Di\{ContainerAware, ContainerInterface};
use Aviat\Ion\Di\Exception\{ContainerException, NotFoundException};
use Aviat\Ion\Event; use Aviat\Ion\Event;
/** /**
@ -129,11 +128,11 @@ final class Auth {
{ {
if (PHP_SAPI === 'cli') if (PHP_SAPI === 'cli')
{ {
return $this->segment->get('auth_token', NULL) return $this->segment->get('auth_token')
?? $this->cache->get(K::AUTH_TOKEN_CACHE_KEY, NULL); ?? $this->cache->get(K::AUTH_TOKEN_CACHE_KEY);
} }
return $this->segment->get('auth_token', NULL); return $this->segment->get('auth_token');
} }
/** /**
@ -146,7 +145,7 @@ final class Auth {
if (PHP_SAPI === 'cli') if (PHP_SAPI === 'cli')
{ {
return $this->segment->get('refresh_token') return $this->segment->get('refresh_token')
?? $this->cache->get(K::AUTH_TOKEN_REFRESH_CACHE_KEY, NULL); ?? $this->cache->get(K::AUTH_TOKEN_REFRESH_CACHE_KEY);
} }
return $this->segment->get('refresh_token'); return $this->segment->get('refresh_token');

View File

@ -16,17 +16,10 @@
namespace Aviat\AnimeClient\API\Kitsu; namespace Aviat\AnimeClient\API\Kitsu;
use Aviat\Ion\Di\Exception\ContainerException;
use Aviat\Ion\Di\Exception\NotFoundException;
use function Amp\Promise\wait;
use function Aviat\AnimeClient\getResponse;
use Amp\Http\Client\Request; use Amp\Http\Client\Request;
use Aviat\AnimeClient\API\AbstractListItem; use Aviat\AnimeClient\API\AbstractListItem;
use Aviat\AnimeClient\Types\FormItemData; use Aviat\AnimeClient\Types\FormItemData;
use Aviat\Ion\Di\ContainerAware; use Aviat\Ion\Di\ContainerAware;
use Aviat\Ion\Json;
use Throwable; use Throwable;

View File

@ -18,7 +18,6 @@ namespace Aviat\AnimeClient\API\Kitsu;
use Amp\Http\Client\Request; use Amp\Http\Client\Request;
use Aviat\AnimeClient\Types\FormItem; use Aviat\AnimeClient\Types\FormItem;
use Aviat\Banker\Exception\InvalidArgumentException;
/** /**
* Kitsu API calls that mutate data, C/U/D parts of CRUD * Kitsu API calls that mutate data, C/U/D parts of CRUD

View File

@ -192,16 +192,13 @@ final class RequestBuilder extends APIRequestBuilder {
$request = $this->setUpRequest($type, $url, $options); $request = $this->setUpRequest($type, $url, $options);
$response = getResponse($request); $response = getResponse($request);
if ($logger !== NULL) $logger?->debug('Kitsu API Response', [
{
$logger->debug('Kitsu API Response', [
'status' => $response->getStatus(), 'status' => $response->getStatus(),
'reason' => $response->getReason(), 'reason' => $response->getReason(),
'body' => $response->getBody(), 'body' => $response->getBody(),
'headers' => $response->getHeaders(), 'headers' => $response->getHeaders(),
'requestHeaders' => $request->getHeaders(), 'requestHeaders' => $request->getHeaders(),
]); ]);
}
return $response; return $response;
} }

View File

@ -27,7 +27,7 @@ trait RequestBuilderTrait {
* Set the request builder object * Set the request builder object
* *
* @param RequestBuilder $requestBuilder * @param RequestBuilder $requestBuilder
* @return $this * @return RequestBuilderTrait|ListItem|Model
*/ */
public function setRequestBuilder(RequestBuilder $requestBuilder): self public function setRequestBuilder(RequestBuilder $requestBuilder): self
{ {

View File

@ -16,7 +16,6 @@
namespace Aviat\AnimeClient\Command; namespace Aviat\AnimeClient\Command;
use Aviat\AnimeClient\Kitsu;
use Aviat\Ion\Di\Exception\ContainerException; use Aviat\Ion\Di\Exception\ContainerException;
use Aviat\Ion\Di\Exception\NotFoundException; use Aviat\Ion\Di\Exception\NotFoundException;
use function Aviat\AnimeClient\clearCache; use function Aviat\AnimeClient\clearCache;

View File

@ -203,7 +203,7 @@ final class SyncLists extends BaseCommand {
* *
* @param string $type * @param string $type
* @param array $data * @param array $data
* @return array|array[] * @return array
*/ */
protected function compare(string $type, array $data): array protected function compare(string $type, array $data): array
{ {

View File

@ -375,10 +375,10 @@ class Controller {
* @param array $data * @param array $data
* @param HtmlView|NULL $view * @param HtmlView|NULL $view
* @param int $code * @param int $code
* @throws InvalidArgumentException
* @return void * @return void
*@throws InvalidArgumentException
*/ */
protected function outputHTML(string $template, array $data = [], $view = NULL, int $code = 200): void protected function outputHTML(string $template, array $data = [], HtmlView $view = NULL, int $code = 200): void
{ {
if (NULL === $view) if (NULL === $view)
{ {

View File

@ -66,15 +66,13 @@ final class Anime extends BaseController {
/** /**
* Show a portion, or all of the anime list * Show a portion, or all of the anime list
* *
* @param string|int $status - The section of the list * @param int|string $status - The section of the list
* @param string|null $view - List or cover view * @param string|null $view - List or cover view
* @throws ContainerException * @return void
* @throws NotFoundException
* @throws InvalidArgumentException * @throws InvalidArgumentException
* @throws Throwable * @throws Throwable
* @return void
*/ */
public function index($status = KitsuWatchingStatus::WATCHING, ?string $view = NULL): void public function index(int|string $status = KitsuWatchingStatus::WATCHING, ?string $view = NULL): void
{ {
if ( ! in_array($status, [ if ( ! in_array($status, [
'all', 'all',
@ -178,7 +176,7 @@ final class Anime extends BaseController {
* @param string $id * @param string $id
* @param string $status * @param string $status
*/ */
public function edit(string $id, $status = 'all'): void public function edit(string $id, string $status = 'all'): void
{ {
$this->checkAuth(); $this->checkAuth();

View File

@ -239,8 +239,6 @@ final class AnimeCollection extends BaseController {
* Update a collection item * Update a collection item
* *
* @param array $data * @param array $data
* @throws ContainerException
* @throws NotFoundException
*/ */
protected function update(array $data): void protected function update(array $data): void
{ {

View File

@ -78,8 +78,6 @@ final class History extends BaseController {
'url_type' => 'anime', 'url_type' => 'anime',
]); ]);
// $this->outputJSON($this->animeModel->getHistory());
// return;
$this->outputHTML('history', [ $this->outputHTML('history', [
'title' => $this->formatTitle( 'title' => $this->formatTitle(
$this->config->get('whose_list') . "'s Anime List", $this->config->get('whose_list') . "'s Anime List",
@ -98,8 +96,6 @@ final class History extends BaseController {
'url_type' => 'manga', 'url_type' => 'manga',
]); ]);
// $this->outputJSON($this->mangaModel->getHistory());
// return;
$this->outputHTML('history', [ $this->outputHTML('history', [
'title' => $this->formatTitle( 'title' => $this->formatTitle(
$this->config->get('whose_list') . "'s Manga List", $this->config->get('whose_list') . "'s Manga List",

View File

@ -16,8 +16,6 @@
namespace Aviat\AnimeClient\Controller; namespace Aviat\AnimeClient\Controller;
use Aviat\Ion\Di\Exception\{ContainerException, NotFoundException};
use function Amp\Promise\wait; use function Amp\Promise\wait;
use function Aviat\AnimeClient\getResponse; use function Aviat\AnimeClient\getResponse;
use function Aviat\AnimeClient\createPlaceholderImage; use function Aviat\AnimeClient\createPlaceholderImage;
@ -39,7 +37,7 @@ final class Images extends BaseController {
* @return void * @return void
* @throws Throwable * @throws Throwable
*/ */
public function cache(string $type, string $file, $display = TRUE): void public function cache(string $type, string $file, bool $display = TRUE): void
{ {
$currentUrl = (string)$this->request->getUri(); $currentUrl = (string)$this->request->getUri();

View File

@ -64,10 +64,10 @@ final class Manga extends Controller {
* *
* @param string $status * @param string $status
* @param string $view * @param string $view
* @throws InvalidArgumentException
* @return void * @return void
*@throws InvalidArgumentException
*/ */
public function index($status = 'all', $view = ''): void public function index(string $status = 'all', string $view = ''): void
{ {
if ( ! in_array($status, [ if ( ! in_array($status, [
'all', 'all',

View File

@ -52,8 +52,6 @@ final class People extends BaseController {
* *
* @param string $slug * @param string $slug
* @return void * @return void
* @throws ContainerException
* @throws NotFoundException
*/ */
public function index(string $slug): void public function index(string $slug): void
{ {

View File

@ -16,6 +16,8 @@
namespace Aviat\AnimeClient; namespace Aviat\AnimeClient;
use Aviat\AnimeClient\Enum\EventType;
use Aviat\Ion\Event;
use Aviat\Ion\Json; use Aviat\Ion\Json;
use Aura\Router\{ use Aura\Router\{
Map, Map,
@ -27,7 +29,6 @@ use Aviat\AnimeClient\API\FailedResponseException;
use Aviat\Ion\Di\ContainerInterface; use Aviat\Ion\Di\ContainerInterface;
use Aviat\Ion\Friend; use Aviat\Ion\Friend;
use Aviat\Ion\Type\StringType; use Aviat\Ion\Type\StringType;
use JetBrains\PhpStorm\ArrayShape;
use LogicException; use LogicException;
use ReflectionException; use ReflectionException;
@ -117,7 +118,7 @@ final class Dispatcher extends RoutingBase {
* @return void * @return void
* @throws ReflectionException * @throws ReflectionException
*/ */
public function __invoke($route = NULL): void public function __invoke(object $route = NULL): void
{ {
$logger = $this->container->getLogger(); $logger = $this->container->getLogger();
@ -136,7 +137,7 @@ final class Dispatcher extends RoutingBase {
{ {
// If not route was matched, return an appropriate http // If not route was matched, return an appropriate http
// error message // error message
$errorRoute = (array)$this->getErrorParams(); $errorRoute = $this->getErrorParams();
$controllerName = DEFAULT_CONTROLLER; $controllerName = DEFAULT_CONTROLLER;
$actionMethod = $errorRoute['action_method']; $actionMethod = $errorRoute['action_method'];
$params = $errorRoute['params']; $params = $errorRoute['params'];
@ -278,17 +279,14 @@ final class Dispatcher extends RoutingBase {
*/ */
protected function call(string $controllerName, string $method, array $params): void protected function call(string $controllerName, string $method, array $params): void
{ {
$logger = $this->container->getLogger('default'); $logger = $this->container->getLogger();
try try
{ {
$controller = new $controllerName($this->container); $controller = new $controllerName($this->container);
// Run the appropriate controller method // Run the appropriate controller method
if ($logger !== NULL) $logger?->debug('Dispatcher - controller arguments', $params);
{
$logger->debug('Dispatcher - controller arguments', $params);
}
$params = array_values($params); $params = array_values($params);
$controller->$method(...$params); $controller->$method(...$params);
@ -360,7 +358,7 @@ final class Dispatcher extends RoutingBase {
} }
/** /**
* Select controller based on the current url, and apply its relevent routes * Select controller based on the current url, and apply its relevant routes
* *
* @return array * @return array
*/ */

View File

@ -16,17 +16,8 @@
namespace Aviat\AnimeClient\Model; namespace Aviat\AnimeClient\Model;
use Aviat\AnimeClient\API\ParallelAPIRequest;
use Aviat\AnimeClient\API\Mapping\AnimeWatchingStatus; use Aviat\AnimeClient\API\Mapping\AnimeWatchingStatus;
use Aviat\AnimeClient\Types\{ use Aviat\AnimeClient\Types\Anime as AnimeType;
Anime as AnimeType,
FormItem,
AnimeListItem
};
use Aviat\Ion\Json;
use Throwable;
use function is_array;
/** /**
* Model for handling requests dealing with the anime list * Model for handling requests dealing with the anime list
@ -64,7 +55,7 @@ class Anime extends API {
{ {
$data = $this->kitsuModel->getFullOrganizedAnimeList(); $data = $this->kitsuModel->getFullOrganizedAnimeList();
foreach($data as $section => &$list) foreach($data as &$list)
{ {
$this->sortByName($list, 'anime'); $this->sortByName($list, 'anime');
} }

View File

@ -578,7 +578,7 @@ final class AnimeCollection extends Collection {
* @param string $animeId The current anime * @param string $animeId The current anime
* @return void * @return void
*/ */
private function updateGenres($animeId): void private function updateGenres(string $animeId): void
{ {
if ($this->db === NULL) if ($this->db === NULL)
{ {

View File

@ -46,8 +46,6 @@ class Util {
* Set up the Util class * Set up the Util class
* *
* @param ContainerInterface $container * @param ContainerInterface $container
* @throws ContainerException
* @throws NotFoundException
*/ */
public function __construct(ContainerInterface $container) public function __construct(ContainerInterface $container)
{ {

View File

@ -45,10 +45,10 @@ class Config implements ConfigInterface {
/** /**
* Does the config item exist? * Does the config item exist?
* *
* @param string|int|array $key * @param array|int|string $key
* @return bool * @return bool
*/ */
public function has($key): bool public function has(array|int|string $key): bool
{ {
return $this->map->hasKey($key); return $this->map->hasKey($key);
} }
@ -60,7 +60,7 @@ class Config implements ConfigInterface {
* @return mixed * @return mixed
* @throws ConfigException * @throws ConfigException
*/ */
public function get($key = NULL) public function get(array|string $key = NULL): mixed
{ {
if (\is_array($key)) if (\is_array($key))
{ {
@ -73,10 +73,10 @@ class Config implements ConfigInterface {
/** /**
* Remove a config value * Remove a config value
* *
* @param string|array $key * @param array|string $key
* @return void * @return void
*/ */
public function delete($key): void public function delete(array|string $key): void
{ {
if (\is_array($key)) if (\is_array($key))
{ {
@ -92,12 +92,12 @@ class Config implements ConfigInterface {
/** /**
* Set a config value * Set a config value
* *
* @param integer|string|array $key * @param array|integer|string $key
* @param mixed $value * @param mixed $value
* @throws InvalidArgumentException
* @return ConfigInterface * @return ConfigInterface
*@throws InvalidArgumentException
*/ */
public function set($key, $value): ConfigInterface public function set(array|int|string $key, mixed $value): ConfigInterface
{ {
if (\is_array($key)) if (\is_array($key))
{ {

View File

@ -23,10 +23,10 @@ interface ConfigInterface {
/** /**
* Does the config item exist? * Does the config item exist?
* *
* @param string|int|array $key * @param array|int|string $key
* @return bool * @return bool
*/ */
public function has($key): bool; public function has(array|int|string $key): bool;
/** /**
* Get a config value * Get a config value
@ -34,23 +34,23 @@ interface ConfigInterface {
* @param array|string|null $key * @param array|string|null $key
* @return mixed * @return mixed
*/ */
public function get($key = NULL); public function get(array|string $key = NULL): mixed;
/** /**
* Set a config value * Set a config value
* *
* @param integer|string|array $key * @param array|integer|string $key
* @param mixed $value * @param mixed $value
* @throws \InvalidArgumentException
* @return ConfigInterface * @return ConfigInterface
* @throws \InvalidArgumentException
*/ */
public function set($key, $value): self; public function set(array|int|string $key, mixed $value): self;
/** /**
* Remove a config value * Remove a config value
* *
* @param string|array $key * @param array|string $key
* @return void * @return void
*/ */
public function delete($key): void; public function delete(array|string $key): void;
} }

View File

@ -51,7 +51,7 @@ abstract class Enum {
* @return boolean * @return boolean
* @throws ReflectionException * @throws ReflectionException
*/ */
public static function isValid($key): bool public static function isValid(mixed $key): bool
{ {
$values = array_values(static::getConstList()); $values = array_values(static::getConstList());
return in_array($key, $values, TRUE); return in_array($key, $values, TRUE);

View File

@ -31,7 +31,7 @@ class Friend {
* Object to create a friend of * Object to create a friend of
* @var mixed * @var mixed
*/ */
private $_friend_; private mixed $_friend_;
/** /**
* Reflection class of the object * Reflection class of the object
@ -46,7 +46,7 @@ class Friend {
* @throws InvalidArgumentException * @throws InvalidArgumentException
* @throws \ReflectionException * @throws \ReflectionException
*/ */
public function __construct($obj) public function __construct(mixed $obj)
{ {
if ( ! \is_object($obj)) if ( ! \is_object($obj))
{ {
@ -63,7 +63,7 @@ class Friend {
* @param string $key * @param string $key
* @return mixed * @return mixed
*/ */
public function __get(string $key) public function __get(string $key): mixed
{ {
if ($this->__isset($key)) if ($this->__isset($key))
{ {
@ -96,7 +96,7 @@ class Friend {
* @param mixed $value * @param mixed $value
* @return void * @return void
*/ */
public function __set(string $key, $value) public function __set(string $key, mixed $value)
{ {
if ($this->__isset($key)) if ($this->__isset($key))
{ {

View File

@ -93,7 +93,7 @@ class HttpView implements HttpViewInterface{
* @param string|string[] $value * @param string|string[] $value
* @return HttpView * @return HttpView
*/ */
public function addHeader(string $name, $value): self public function addHeader(string $name, array|string $value): self
{ {
$this->response = $this->response->withHeader($name, $value); $this->response = $this->response->withHeader($name, $value);
return $this; return $this;
@ -105,7 +105,7 @@ class HttpView implements HttpViewInterface{
* @param mixed $string * @param mixed $string
* @return HttpViewInterface * @return HttpViewInterface
*/ */
public function setOutput($string): HttpViewInterface public function setOutput(mixed $string): HttpViewInterface
{ {
$this->response->getBody()->write($string); $this->response->getBody()->write($string);

View File

@ -37,7 +37,7 @@ interface ViewInterface {
* @param mixed $string * @param mixed $string
* @return ViewInterface * @return ViewInterface
*/ */
public function setOutput($string): self; public function setOutput(mixed $string): self;
/** /**
* Append additional output. * Append additional output.
@ -54,7 +54,7 @@ interface ViewInterface {
* @param string|string[] $value * @param string|string[] $value
* @return ViewInterface * @return ViewInterface
*/ */
public function addHeader(string $name, $value): self; public function addHeader(string $name, array|string $value): self;
/** /**
* Get the current output as a string. Does not * Get the current output as a string. Does not

View File

@ -20,7 +20,7 @@ use Aviat\Ion\Config;
class ConfigTest extends IonTestCase { class ConfigTest extends IonTestCase {
protected $config; protected Config $config;
public function setUp(): void public function setUp(): void
{ {
@ -66,12 +66,6 @@ class ConfigTest extends IonTestCase {
$this->assertEquals('great', $this->config->get(['apple', 'sauce', 'is']), "Array argument get for config failed."); $this->assertEquals('great', $this->config->get(['apple', 'sauce', 'is']), "Array argument get for config failed.");
} }
public function testConfigBadSet(): void
{
$this->expectException('InvalidArgumentException');
$this->config->set(NULL, FALSE);
}
public function dataConfigDelete(): array public function dataConfigDelete(): array
{ {
return [ return [