/** * @internal param \Dive\Console\OutputWriterInterface $outputWriter * @return bool */ public function execute() { $this->schema = $this->getSchema(); $this->createModelGenerator(); $targetDirectory = $this->getParam('target-dir'); $missingModels = $this->modelGenerator->getMissingModels($this->schema, $targetDirectory); $wroteModels = $this->writeModelFiles($missingModels, 'New model classes: '); $overwriteExistingModels = $this->getBooleanParam('overwrite', null); if ($overwriteExistingModels === null) { $overwriteExistingModels = $this->readInput('Do you want to overwrite existing model classes? [yes,no]'); } if ($overwriteExistingModels) { $this->outputWriter->writeLine('Existing model classes will be overwritten!'); $existingModels = $this->modelGenerator->getMissingModels($this->schema, $targetDirectory); $wroteExistingModels = $this->writeModelFiles($existingModels, 'Overwritten model classes: '); if ($wroteExistingModels) { $wroteModels = true; } } else { $this->outputWriter->writeLine('Existing model classes will NOT be overwritten!'); } if (!$wroteModels) { $this->outputWriter->writeLine("WARNING: No models have been generated!\n" . " To generate model classes, you have to specify the key 'recordClass'\n" . " for each table in your schema file!"); } return true; }
/** * @param string[] $expectedNotExistingModels * @dataProvider provideIteration */ public function testCreateNeededModels(array $expectedNotExistingModels) { $schema = $this->getSchema(); $missingModels = $this->modelGenerator->getMissingModels($schema, self::$targetDirectory); $formatter = $this->getFormatter(); $this->assertEquals($expectedNotExistingModels, $missingModels, '', 0, 10, true); $fileNames = array(); $modelFileNames = array(); foreach ($missingModels as $missingModel) { $fileName = $formatter->getTargetFileName($missingModel, self::$targetDirectory); $this->assertFileNotExists($fileName); $fileNames[] = $fileName; $modelFileNames[$fileName] = $missingModel; } // create files $this->modelGenerator->writeMissingModelFiles($schema, self::$targetDirectory); // check created foreach ($fileNames as $fileName) { $this->assertFileExists($fileName); $classContent = $this->modelGenerator->getContent($modelFileNames[$fileName], $schema); $this->assertStringEqualsFile($fileName, $classContent); } }