diff --git a/src/DI.php b/src/DI.php index b7be36212..38d000423 100644 --- a/src/DI.php +++ b/src/DI.php @@ -8,83 +8,10 @@ use Psr\Log\LoggerInterface; /** * This class is capable of getting all dynamic created classes * - * There has to be a "method" phpDoc for each new class, containing result class for a proper matching - * - * @method static App app() - * @method static App\Authentication auth() - * @method static App\Arguments args() - * @method static App\BaseURL baseUrl() - * @method static App\Mode mode() - * @method static App\Module module() - * @method static App\Page page() - * @method static App\Router router() - * @method static Content\Item contentItem() - * @method static Content\Text\BBCode\Video bbCodeVideo() - * @method static Core\Cache\ICache cache() - * @method static Core\Config\IConfiguration config() - * @method static Core\Config\IPConfiguration pConfig() - * @method static Core\Lock\ILock lock() - * @method static Core\L10n\L10n l10n() - * @method static Core\Process process() - * @method static Core\Session\ISession session() - * @method static Core\StorageManager storageManager() - * @method static Database\Database dba() - * @method static Factory\Mastodon\Account mstdnAccount() - * @method static Factory\Mastodon\FollowRequest mstdnFollowRequest() - * @method static Factory\Mastodon\Relationship mstdnRelationship() - * @method static Model\User\Cookie cookie() - * @method static Model\Notify notify() - * @method static Repository\Introduction intro() - * @method static Model\Storage\IStorage storage() - * @method static Protocol\Activity activity() - * @method static Util\ACLFormatter aclFormatter() - * @method static Util\DateTimeFormat dtFormat() - * @method static Util\FileSystem fs() - * @method static Util\Profiler profiler() - * @method static LoggerInterface logger() - * @method static LoggerInterface devLogger() - * @method static LoggerInterface workerLogger() - * + * @see https://designpatternsphp.readthedocs.io/en/latest/Structural/Registry/README.html */ abstract class DI { - const CLASS_MAPPING = [ - 'app' => App::class, - 'auth' => App\Authentication::class, - 'args' => App\Arguments::class, - 'baseUrl' => App\BaseURL::class, - 'mode' => App\Mode::class, - 'module' => App\Module::class, - 'page' => App\Page::class, - 'router' => App\Router::class, - 'contentItem' => Content\Item::class, - 'bbCodeVideo' => Content\Text\BBCode\Video::class, - 'cache' => Core\Cache\ICache::class, - 'config' => Core\Config\IConfiguration::class, - 'pConfig' => Core\Config\IPConfiguration::class, - 'l10n' => Core\L10n\L10n::class, - 'lock' => Core\Lock\ILock::class, - 'process' => Core\Process::class, - 'session' => Core\Session\ISession::class, - 'storageManager' => Core\StorageManager::class, - 'dba' => Database\Database::class, - 'mstdnAccount' => Factory\Mastodon\Account::class, - 'mstdnFollowRequest' => Factory\Mastodon\FollowRequest::class, - 'mstdnRelationship' => Factory\Mastodon\Relationship::class, - 'cookie' => Model\User\Cookie::class, - 'notify' => Model\Notify::class, - 'storage' => Model\Storage\IStorage::class, - 'intro' => Repository\Introduction::class, - 'activity' => Protocol\Activity::class, - 'aclFormatter' => Util\ACLFormatter::class, - 'dtFormat' => Util\DateTimeFormat::class, - 'fs' => Util\FileSystem::class, - 'workerLogger' => Util\Logger\WorkerLogger::class, - 'profiler' => Util\Profiler::class, - 'logger' => LoggerInterface::class, - 'devLogger' => '$devLogger', - ]; - /** @var Dice */ private static $dice; @@ -93,8 +20,312 @@ abstract class DI self::$dice = $dice; } - public static function __callStatic($name, $arguments) + // + // common instances + // + + /** + * @return App + */ + public static function app() { - return self::$dice->create(self::CLASS_MAPPING[$name], $arguments); + return self::$dice->create(App::class); + } + + /** + * @return Database\Database + */ + public static function dba() + { + return self::$dice->create(Database\Database::class); + } + + // + // "App" namespace instances + // + + /** + * @return App\Authentication + */ + public static function auth() + { + return self::$dice->create(App\Authentication::class); + } + + /** + * @return App\Arguments + */ + public static function args() + { + return self::$dice->create(App\Arguments::class); + } + + /** + * @return App\BaseURL + */ + public static function baseUrl() + { + return self::$dice->create(App\BaseURL::class); + } + + /** + * @return App\Mode + */ + public static function mode() + { + return self::$dice->create(App\Mode::class); + } + + /** + * @return App\Module + */ + public static function module() + { + return self::$dice->create(App\Module::class); + } + + /** + * @return App\Page + */ + public static function page() + { + return self::$dice->create(App\Page::class); + } + + /** + * @return App\Router + */ + public static function router() + { + return self::$dice->create(App\Router::class); + } + + // + // "Content" namespace instances + // + + /** + * @return Content\Item + */ + public static function contentItem() + { + return self::$dice->create(Content\Item::class); + } + + /** + * @return Content\Text\BBCode\Video + */ + public static function bbCodeVideo() + { + return self::$dice->create(Content\Text\BBCode\Video::class); + } + + // + // "Core" namespace instances + // + + /** + * @return Core\Cache\ICache + */ + public static function cache() + { + return self::$dice->create(Core\Cache\ICache::class); + } + + /** + * @return Core\Config\IConfiguration + */ + public static function config() + { + return self::$dice->create(Core\Config\IConfiguration::class); + } + + /** + * @return Core\Config\IPConfiguration + */ + public static function pConfig() + { + return self::$dice->create(Core\Config\IPConfiguration::class); + } + + /** + * @return Core\Lock\ILock + */ + public static function lock() + { + return self::$dice->create(Core\Lock\ILock::class); + } + + public static function l10n() + { + return self::$dice->create(Core\L10n\L10n::class); + } + + /** + * @return Core\Process + */ + public static function process() + { + return self::$dice->create(Core\Process::class); + } + + /** + * @return Core\Session\ISession + */ + public static function session() + { + return self::$dice->create(Core\Session\ISession::class); + } + + /** + * @return Core\StorageManager + */ + public static function storageManager() + { + return self::$dice->create(Core\StorageManager::class); + } + + // + // "LoggerInterface" instances + // + + /** + * @return LoggerInterface + */ + public static function logger() + { + return self::$dice->create(LoggerInterface::class); + } + + /** + * @return LoggerInterface + */ + public static function devLogger() + { + return self::$dice->create('$devLogger'); + } + + /** + * @return LoggerInterface + */ + public static function workerLogger() + { + return self::$dice->create(Util\Logger\WorkerLogger::class); + } + + // + // "Factory" namespace instances + // + + /** + * @return Factory\Mastodon\Account + */ + public static function mstdnAccount() + { + return self::$dice->create(Factory\Mastodon\Account::class); + } + + /** + * @return Factory\Mastodon\FollowRequest + */ + public static function mstdnFollowRequest() + { + return self::$dice->create(Factory\Mastodon\FollowRequest::class); + } + + /** + * @return Factory\Mastodon\Relationship + */ + public static function mstdnRelationship() + { + return self::$dice->create(Factory\Mastodon\Relationship::class); + } + + // + // "Model" namespace instances + // + + /** + * @return Model\User\Cookie + */ + public static function cookie() + { + return self::$dice->create(Model\User\Cookie::class); + } + + /** + * @return Model\Notify + */ + public static function notify() + { + return self::$dice->create(Model\Notify::class); + } + + /** + * @return Model\Storage\IStorage + */ + public static function storage() + { + return self::$dice->create(Model\Storage\IStorage::class); + } + + // + // "Repository" namespace + // + + /** + * @return Repository\Introduction + */ + public static function intro() + { + return self::$dice->create(Repository\Introduction::class); + } + + // + // "Protocol" namespace instances + // + + /** + * @return Protocol\Activity + */ + public static function activity() + { + return self::$dice->create(Protocol\Activity::class); + } + + // + // "Util" namespace instances + // + + /** + * @return Util\ACLFormatter + */ + public static function aclFormatter() + { + return self::$dice->create(Util\ACLFormatter::class); + } + + /** + * @return Util\DateTimeFormat + */ + public static function dtFormat() + { + return self::$dice->create(Util\DateTimeFormat::class); + } + + /** + * @return Util\FileSystem + */ + public static function fs() + { + return self::$dice->create(Util\FileSystem::class); + } + + /** + * @return Util\Profiler + */ + public static function profiler() + { + return self::$dice->create(Util\Profiler::class); } } diff --git a/tests/Util/AppMockTrait.php b/tests/Util/AppMockTrait.php index 7948f09f6..f0231b280 100644 --- a/tests/Util/AppMockTrait.php +++ b/tests/Util/AppMockTrait.php @@ -54,11 +54,11 @@ trait AppMockTrait $this->configMock = \Mockery::mock(Config\Cache\ConfigCache::class); $this->dice->shouldReceive('create') - ->with(Config\Cache\ConfigCache::class, []) + ->with(Config\Cache\ConfigCache::class) ->andReturn($this->configMock); $this->mode = \Mockery::mock(App\Mode::class); $this->dice->shouldReceive('create') - ->with(App\Mode::class, []) + ->with(App\Mode::class) ->andReturn($this->mode); $configModel= \Mockery::mock(\Friendica\Model\Config\Config::class); // Disable the adapter @@ -66,48 +66,33 @@ trait AppMockTrait $config = new Config\JitConfiguration($this->configMock, $configModel); $this->dice->shouldReceive('create') - ->with(Config\IConfiguration::class, []) + ->with(Config\IConfiguration::class) ->andReturn($config); // Mocking App and most used functions $this->app = \Mockery::mock(App::class); $this->dice->shouldReceive('create') - ->with(App::class, []) + ->with(App::class) ->andReturn($this->app); $this->app ->shouldReceive('getBasePath') ->andReturn($root->url()); - $this->app - ->shouldReceive('getMode') - ->andReturn($this->mode); - $this->profilerMock = \Mockery::mock(Profiler::class); $this->profilerMock->shouldReceive('saveTimestamp'); $this->dice->shouldReceive('create') - ->with(Profiler::class, []) + ->with(Profiler::class) ->andReturn($this->profilerMock); $this->app ->shouldReceive('getConfigCache') ->andReturn($this->configMock); - $this->app - ->shouldReceive('getConfig') - ->andReturn($config); $this->app ->shouldReceive('getTemplateEngine') ->andReturn(new FriendicaSmartyEngine()); $this->app ->shouldReceive('getCurrentTheme') ->andReturn('Smarty3'); - $this->app - ->shouldReceive('getProfiler') - ->andReturn($this->profilerMock); - $this->app - ->shouldReceive('getBaseUrl') - ->andReturnUsing(function () { - return $this->configMock->get('system', 'url'); - }); DI::init($this->dice); diff --git a/tests/src/Content/Text/BBCodeTest.php b/tests/src/Content/Text/BBCodeTest.php index 52d01401e..ed33306ed 100644 --- a/tests/src/Content/Text/BBCodeTest.php +++ b/tests/src/Content/Text/BBCodeTest.php @@ -43,13 +43,13 @@ class BBCodeTest extends MockedTest $l10nMock = \Mockery::mock(L10n::class); $l10nMock->shouldReceive('t')->withAnyArgs()->andReturnUsing(function ($args) { return $args; }); $this->dice->shouldReceive('create') - ->with(L10n::class, []) + ->with(L10n::class) ->andReturn($l10nMock); $baseUrlMock = \Mockery::mock(BaseURL::class); $baseUrlMock->shouldReceive('get')->withAnyArgs()->andReturn('friendica.local'); $this->dice->shouldReceive('create') - ->with(BaseURL::class, []) + ->with(BaseURL::class) ->andReturn($baseUrlMock); } diff --git a/tests/src/Core/InstallerTest.php b/tests/src/Core/InstallerTest.php index dd7790e73..370373850 100644 --- a/tests/src/Core/InstallerTest.php +++ b/tests/src/Core/InstallerTest.php @@ -34,7 +34,7 @@ class InstallerTest extends MockedTest $dice = $dice->addRules(include __DIR__ . '/../../../static/dependencies.config.php'); $dice->shouldReceive('create') - ->with(\Friendica\Core\L10n\L10n::class, []) + ->with(\Friendica\Core\L10n\L10n::class) ->andReturn($this->l10nMock); DI::init($dice); diff --git a/tests/src/Core/Lock/SemaphoreLockTest.php b/tests/src/Core/Lock/SemaphoreLockTest.php index 089d891ca..6b4daf887 100644 --- a/tests/src/Core/Lock/SemaphoreLockTest.php +++ b/tests/src/Core/Lock/SemaphoreLockTest.php @@ -19,14 +19,14 @@ class SemaphoreLockTest extends LockTest $app = \Mockery::mock(App::class); $app->shouldReceive('getHostname')->andReturn('friendica.local'); - $dice->shouldReceive('create')->with(App::class, [])->andReturn($app); + $dice->shouldReceive('create')->with(App::class)->andReturn($app); $configMock = \Mockery::mock(JitConfiguration::class); $configMock ->shouldReceive('get') ->with('system', 'temppath', NULL, false) ->andReturn('/tmp/'); - $dice->shouldReceive('create')->with(IConfiguration::class, [])->andReturn($configMock); + $dice->shouldReceive('create')->with(IConfiguration::class)->andReturn($configMock); // @todo Because "get_temppath()" is using static methods, we have to initialize the BaseObject DI::init($dice); diff --git a/tests/src/Core/SystemTest.php b/tests/src/Core/SystemTest.php index 2f01df344..1b09eb46a 100644 --- a/tests/src/Core/SystemTest.php +++ b/tests/src/Core/SystemTest.php @@ -15,7 +15,7 @@ class SystemTest extends TestCase $baseUrl = \Mockery::mock(BaseURL::class); $baseUrl->shouldReceive('getHostname')->andReturn('friendica.local')->once(); $dice = \Mockery::mock(Dice::class); - $dice->shouldReceive('create')->with(BaseURL::class, [])->andReturn($baseUrl); + $dice->shouldReceive('create')->with(BaseURL::class)->andReturn($baseUrl); DI::init($dice); } diff --git a/tests/src/Network/CurlResultTest.php b/tests/src/Network/CurlResultTest.php index 294be6b0b..20287c973 100644 --- a/tests/src/Network/CurlResultTest.php +++ b/tests/src/Network/CurlResultTest.php @@ -22,7 +22,7 @@ class CurlResultTest extends TestCase $logger = new NullLogger(); $dice->shouldReceive('create') - ->with(LoggerInterface::class, []) + ->with(LoggerInterface::class) ->andReturn($logger); DI::init($dice);