diff --git a/bin/architectural-decisions b/bin/architectural-decisions index 658b0ce..eae5e6e 100755 --- a/bin/architectural-decisions +++ b/bin/architectural-decisions @@ -3,6 +3,7 @@ use Cspray\AnnotatedTarget\PhpParserAnnotatedTargetParser; use Cspray\ArchitecturalDecision\ArchitecturalDecisionAttributeGatherer; +use Cspray\ArchitecturalDecision\Initializer; use Cspray\ArchitecturalDecision\SourceArchitecturalDecisionAttributeRegistry; use Cspray\ArchitecturalDecision\XmlDocumentGenerator; @@ -34,6 +35,24 @@ foreach (new RecursiveIteratorIterator(new RecursiveArrayIterator($composerDirs) $paths[] = $rootDir . '/' . $composerDir; } +$initializers = $composer['extra']['$architecturalDecision']['initializers'] ?? []; + +foreach ($initializers as $initializerClass) { + $initializerClass = (string) $initializerClass; + if (!class_exists($initializerClass)) { + echo 'Your configured initializer ' . $initializerClass . ' is not an autoloadable class.'; + exit(255); + } + + if (!is_subclass_of($initializerClass, Initializer::class)) { + echo 'Your configured initializer ' . $initializerClass . ' MUST extend ' . Initializer::class; + exit(255); + } + + $initializer = new $initializerClass(); + $paths = [...$paths, ...$initializer->getAdditionalScanPaths()]; +} + $attributes = (new SourceArchitecturalDecisionAttributeRegistry($paths))->getArchitecturalDecisionAttributes(); if (count($attributes) === 0) { echo 'You must implement an ArchitecturalDecisionRecord in your codebase before running this command!'; @@ -46,7 +65,11 @@ foreach ($attributes as $attribute) { } if (file_exists($rootDir . '/architectural-decisions.xml')) { - unlink($rootDir . '/architectural-decisions.xml'); + if (file_exists($rootDir . '/architectural-decisions.xml.bak')) { + echo 'Please ensure there are no architectural-decisions.xml.bak files before running this command.'; + exit(255); + } + rename($rootDir . '/architectural-decisions.xml', $rootDir . '/architectural-decisions.xml.bak'); } $xmlGenerator = new XmlDocumentGenerator($gatherer); diff --git a/src/Initializer.php b/src/Initializer.php new file mode 100644 index 0000000..65b0248 --- /dev/null +++ b/src/Initializer.php @@ -0,0 +1,14 @@ + + */ + abstract public function getAdditionalScanPaths() : array; + +}