File tree Expand file tree Collapse file tree 3 files changed +41
-3
lines changed Expand file tree Collapse file tree 3 files changed +41
-3
lines changed Original file line number Diff line number Diff line change 2323 // 'user'
2424 // ]
2525 ],
26-
26+
27+ /*
28+ * If you want to see only specific models, specify them here using fully qualified
29+ * classnames.
30+ *
31+ * Note: that if this array is filled, the 'ignore' array will not be used.
32+ */
33+ 'whitelist ' => [
34+ // App\User::class,
35+ // App\Post::class,
36+ ],
37+
2738 /*
2839 * If true, all directories specified will be scanned recursively for models.
2940 * Set this to false if you prefer to explicitly define each directory that should
Original file line number Diff line number Diff line change @@ -31,16 +31,25 @@ public function getModelsInDirectory(string $directory): Collection
3131 $ this ->filesystem ->files ($ directory );
3232
3333 $ ignoreModels = array_filter (config ('erd-generator.ignore ' , []), 'is_string ' );
34+ $ whitelistModels = array_filter (config ('erd-generator.whitelist ' , []), 'is_string ' );
3435
35- return Collection::make ($ files )->filter (function ($ path ) {
36+ $ collection = Collection::make ($ files )->filter (function ($ path ) {
3637 return Str::endsWith ($ path , '.php ' );
3738 })->map (function ($ path ) {
3839 return $ this ->getFullyQualifiedClassNameFromFile ($ path );
3940 })->filter (function (string $ className ) {
4041 return !empty ($ className )
4142 && is_subclass_of ($ className , EloquentModel::class)
4243 && ! (new ReflectionClass ($ className ))->isAbstract ();
43- })->diff ($ ignoreModels )->sort ();
44+ });
45+
46+ if (!count ($ whitelistModels )) {
47+ return $ collection ->diff ($ ignoreModels )->sort ();
48+ }
49+
50+ return $ collection ->filter (function (string $ className ) use ($ whitelistModels ) {
51+ return in_array ($ className , $ whitelistModels );
52+ });
4453 }
4554
4655 protected function getFullyQualifiedClassNameFromFile (string $ path ): string
Original file line number Diff line number Diff line change @@ -46,4 +46,22 @@ public function it_will_ignore_a_model_if_it_is_excluded_on_config()
4646 $ classNames ->values ()->all ()
4747 );
4848 }
49+
50+ /** @test */
51+ public function it_will_only_return_models_in_whitelist_if_present ()
52+ {
53+ $ this ->app ['config ' ]->set ('erd-generator.whitelist ' , [
54+ Avatar::class,
55+ ]);
56+
57+ $ finder = new ModelFinder (app ()->make ('files ' ));
58+
59+ $ classNames = $ finder ->getModelsInDirectory (__DIR__ . "/Models " );
60+
61+ $ this ->assertCount (1 , $ classNames );
62+ $ this ->assertEquals (
63+ [Avatar::class],
64+ $ classNames ->values ()->all ()
65+ );
66+ }
4967}
You can’t perform that action at this time.
0 commit comments