Skip to content

Commit 972339d

Browse files
authored
Merge pull request #5 from cspray/feature/configure-scan-paths
Ability to definie additional scan paths
2 parents 5775465 + 7ee9cdc commit 972339d

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

bin/architectural-decisions

+24-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
use Cspray\AnnotatedTarget\PhpParserAnnotatedTargetParser;
55
use Cspray\ArchitecturalDecision\ArchitecturalDecisionAttributeGatherer;
6+
use Cspray\ArchitecturalDecision\Initializer;
67
use Cspray\ArchitecturalDecision\SourceArchitecturalDecisionAttributeRegistry;
78
use Cspray\ArchitecturalDecision\XmlDocumentGenerator;
89

@@ -34,6 +35,24 @@ foreach (new RecursiveIteratorIterator(new RecursiveArrayIterator($composerDirs)
3435
$paths[] = $rootDir . '/' . $composerDir;
3536
}
3637

38+
$initializers = $composer['extra']['$architecturalDecision']['initializers'] ?? [];
39+
40+
foreach ($initializers as $initializerClass) {
41+
$initializerClass = (string) $initializerClass;
42+
if (!class_exists($initializerClass)) {
43+
echo 'Your configured initializer ' . $initializerClass . ' is not an autoloadable class.';
44+
exit(255);
45+
}
46+
47+
if (!is_subclass_of($initializerClass, Initializer::class)) {
48+
echo 'Your configured initializer ' . $initializerClass . ' MUST extend ' . Initializer::class;
49+
exit(255);
50+
}
51+
52+
$initializer = new $initializerClass();
53+
$paths = [...$paths, ...$initializer->getAdditionalScanPaths()];
54+
}
55+
3756
$attributes = (new SourceArchitecturalDecisionAttributeRegistry($paths))->getArchitecturalDecisionAttributes();
3857
if (count($attributes) === 0) {
3958
echo 'You must implement an ArchitecturalDecisionRecord in your codebase before running this command!';
@@ -46,7 +65,11 @@ foreach ($attributes as $attribute) {
4665
}
4766

4867
if (file_exists($rootDir . '/architectural-decisions.xml')) {
49-
unlink($rootDir . '/architectural-decisions.xml');
68+
if (file_exists($rootDir . '/architectural-decisions.xml.bak')) {
69+
echo 'Please ensure there are no architectural-decisions.xml.bak files before running this command.';
70+
exit(255);
71+
}
72+
rename($rootDir . '/architectural-decisions.xml', $rootDir . '/architectural-decisions.xml.bak');
5073
}
5174

5275
$xmlGenerator = new XmlDocumentGenerator($gatherer);

src/Initializer.php

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace Cspray\ArchitecturalDecision;
4+
5+
abstract class Initializer {
6+
7+
final public function __construct() {}
8+
9+
/**
10+
* @return list<non-empty-string>
11+
*/
12+
abstract public function getAdditionalScanPaths() : array;
13+
14+
}

0 commit comments

Comments
 (0)