From f2bc007c2d8fb6f30d379387f25cad9413821b27 Mon Sep 17 00:00:00 2001 From: Franz Liedke Date: Sat, 26 Jan 2019 23:04:29 +0100 Subject: [PATCH] Simplify DataProviderInterface Instead of passing all these objects / arrays from one object to the next, simply pass an Installation instance around for configuration. --- .../Install/Console/DataProviderInterface.php | 13 ++------ .../src/Install/Console/FileDataProvider.php | 30 ++++++++----------- .../src/Install/Console/InstallCommand.php | 15 ++++------ .../src/Install/Console/UserDataProvider.php | 30 +++++++++++-------- 4 files changed, 38 insertions(+), 50 deletions(-) diff --git a/framework/core/src/Install/Console/DataProviderInterface.php b/framework/core/src/Install/Console/DataProviderInterface.php index 0c4175a93..94816bd7b 100644 --- a/framework/core/src/Install/Console/DataProviderInterface.php +++ b/framework/core/src/Install/Console/DataProviderInterface.php @@ -11,18 +11,9 @@ namespace Flarum\Install\Console; -use Flarum\Install\AdminUser; -use Flarum\Install\DatabaseConfig; +use Flarum\Install\Installation; interface DataProviderInterface { - public function getDatabaseConfiguration(): DatabaseConfig; - - public function getBaseUrl(); - - public function getAdminUser(): AdminUser; - - public function getSettings(); - - public function isDebugMode(): bool; + public function configure(Installation $installation): Installation; } diff --git a/framework/core/src/Install/Console/FileDataProvider.php b/framework/core/src/Install/Console/FileDataProvider.php index 5ce2e1e26..07626bfa4 100644 --- a/framework/core/src/Install/Console/FileDataProvider.php +++ b/framework/core/src/Install/Console/FileDataProvider.php @@ -14,6 +14,7 @@ namespace Flarum\Install\Console; use Exception; use Flarum\Install\AdminUser; use Flarum\Install\DatabaseConfig; +use Flarum\Install\Installation; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Yaml\Yaml; @@ -53,7 +54,17 @@ class FileDataProvider implements DataProviderInterface } } - public function getDatabaseConfiguration(): DatabaseConfig + public function configure(Installation $installation): Installation + { + return $installation + ->debugMode($this->debug) + ->baseUrl($this->baseUrl ?? 'http://flarum.local') + ->databaseConfig($this->getDatabaseConfiguration()) + ->adminUser($this->getAdminUser()) + ->settings($this->settings); + } + + private function getDatabaseConfiguration(): DatabaseConfig { return new DatabaseConfig( $this->databaseConfiguration['driver'] ?? 'mysql', @@ -66,12 +77,7 @@ class FileDataProvider implements DataProviderInterface ); } - public function getBaseUrl() - { - return $this->baseUrl ?? 'http://flarum.local'; - } - - public function getAdminUser(): AdminUser + private function getAdminUser(): AdminUser { return new AdminUser( $this->adminUser['username'] ?? 'admin', @@ -79,14 +85,4 @@ class FileDataProvider implements DataProviderInterface $this->adminUser['email'] ?? 'admin@example.com' ); } - - public function getSettings() - { - return $this->settings; - } - - public function isDebugMode(): bool - { - return $this->debug; - } } diff --git a/framework/core/src/Install/Console/InstallCommand.php b/framework/core/src/Install/Console/InstallCommand.php index b476fb45d..6356cf620 100644 --- a/framework/core/src/Install/Console/InstallCommand.php +++ b/framework/core/src/Install/Console/InstallCommand.php @@ -89,16 +89,11 @@ class InstallCommand extends AbstractCommand protected function install() { - $this->runPipeline( - $this->installation - ->configPath($this->input->getOption('config')) - ->debugMode($this->dataSource->isDebugMode()) - ->baseUrl($this->dataSource->getBaseUrl()) - ->databaseConfig($this->dataSource->getDatabaseConfiguration()) - ->adminUser($this->dataSource->getAdminUser()) - ->settings($this->dataSource->getSettings()) - ->build() - ); + $pipeline = $this->dataSource->configure( + $this->installation->configPath($this->input->getOption('config')) + )->build(); + + $this->runPipeline($pipeline); } private function runPipeline(Pipeline $pipeline) diff --git a/framework/core/src/Install/Console/UserDataProvider.php b/framework/core/src/Install/Console/UserDataProvider.php index ef8bd1df0..d1c4caa20 100644 --- a/framework/core/src/Install/Console/UserDataProvider.php +++ b/framework/core/src/Install/Console/UserDataProvider.php @@ -13,6 +13,7 @@ namespace Flarum\Install\Console; use Flarum\Install\AdminUser; use Flarum\Install\DatabaseConfig; +use Flarum\Install\Installation; use Symfony\Component\Console\Helper\QuestionHelper; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; @@ -35,7 +36,17 @@ class UserDataProvider implements DataProviderInterface $this->questionHelper = $questionHelper; } - public function getDatabaseConfiguration(): DatabaseConfig + public function configure(Installation $installation): Installation + { + return $installation + ->debugMode(false) + ->baseUrl($this->getBaseUrl()) + ->databaseConfig($this->getDatabaseConfiguration()) + ->adminUser($this->getAdminUser()) + ->settings($this->getSettings()); + } + + private function getDatabaseConfiguration(): DatabaseConfig { $host = $this->ask('Database host:'); $port = 3306; @@ -55,12 +66,12 @@ class UserDataProvider implements DataProviderInterface ); } - public function getBaseUrl() + private function getBaseUrl() { return $this->baseUrl = rtrim($this->ask('Base URL:'), '/'); } - public function getAdminUser(): AdminUser + private function getAdminUser(): AdminUser { return new AdminUser( $this->ask('Admin username:'), @@ -90,7 +101,7 @@ class UserDataProvider implements DataProviderInterface } } - public function getSettings() + private function getSettings() { $title = $this->ask('Forum title:'); $baseUrl = $this->baseUrl ?: 'http://localhost'; @@ -102,14 +113,14 @@ class UserDataProvider implements DataProviderInterface ]; } - protected function ask($question, $default = null) + private function ask($question, $default = null) { $question = new Question("$question ", $default); return $this->questionHelper->ask($this->input, $this->output, $question); } - protected function secret($question) + private function secret($question) { $question = new Question("$question "); @@ -118,14 +129,9 @@ class UserDataProvider implements DataProviderInterface return $this->questionHelper->ask($this->input, $this->output, $question); } - protected function validationError($message) + private function validationError($message) { $this->output->writeln("$message"); $this->output->writeln('Please try again.'); } - - public function isDebugMode(): bool - { - return false; - } }