11<?php
22
3+ declare (strict_types=1 );
34
45namespace Wave \SDK \ModelGenerator ;
56
910
1011class Generator {
1112
12- private static $ defaults = [];
13+ private static array $ defaults = [];
1314
14- private $ twig ;
15+ private Schema $ input ;
16+
17+ private array $ args ;
18+
19+ private Environment $ twig ;
1520
1621 public function __construct (Schema $ input , array $ args = []) {
1722
1823 $ this ->input = $ input ;
1924 $ this ->args = array_merge (self ::$ defaults , $ args );
2025
21- $ loader = new FilesystemLoader (__DIR__ . DS . 'Templates ' );
26+ $ loader = new FilesystemLoader (__DIR__ . DIRECTORY_SEPARATOR . 'Templates ' );
2227 $ this ->twig = new Environment ($ loader , array (
2328 'autoescape ' => false ,
2429 'debug ' => true
@@ -33,27 +38,30 @@ public function __construct(Schema $input, array $args = []) {
3338
3439 }));
3540 $ this ->twig ->addFilter (new TwigFilter ('print_r ' , 'print_r ' ));
36- $ this ->twig ->addFilter (new TwigFilter ('explode ' , function ($ a , $ d ){
41+ $ this ->twig ->addFilter (new TwigFilter ('explode ' , function ($ a , $ d ){
3742 if ($ a === null ) {
3843 return ["" ];
3944 }
4045
41- return explode ($ d , $ a );
46+ return explode ($ d , $ a );
4247 }));
4348 }
4449
45- public function generate ($ output_directory , $ base_namespace , $ base_model_class ){
50+ /**
51+ * @return array<string, array<int, string>>
52+ */
53+ public function generate (string $ output_directory , string $ base_namespace , string $ base_model_class ): array {
4654
4755 $ schemas = $ this ->input ->getSchemaNames ();
4856
4957 $ base_namespace = trim ($ base_namespace , '\\' );
50- $ output_directory = rtrim ($ output_directory , ' / ' ) . ' / ' ;
58+ $ output_directory = rtrim ($ output_directory , DIRECTORY_SEPARATOR ) . DIRECTORY_SEPARATOR ;
5159
5260 $ files_written = [];
5361 foreach ($ schemas as $ schema ){
5462
5563 $ namespace = $ base_namespace . '\\' . ucfirst ($ schema );
56- $ directory = $ output_directory . ucfirst ($ schema ) . DS ;
64+ $ directory = $ output_directory . ucfirst ($ schema ) . DIRECTORY_SEPARATOR ;
5765
5866 $ files = $ this ->generateModelsFor ($ schema , $ directory , $ namespace , $ base_model_class );
5967 $ files_written [$ schema ] = $ files ;
@@ -63,7 +71,10 @@ public function generate($output_directory, $base_namespace, $base_model_class){
6371
6472 }
6573
66- public function generateModelsFor ($ schema , $ base_directory , $ base_namespace , $ base_model_class ){
74+ /**
75+ * @return array<int, string>
76+ */
77+ public function generateModelsFor (string $ schema , string $ base_directory , string $ base_namespace , string $ base_model_class ): array {
6778
6879 $ models = $ this ->input ->getModels ($ schema );
6980 $ meta = $ this ->input ->getMeta ($ schema );
@@ -78,7 +89,7 @@ public function generateModelsFor($schema, $base_directory, $base_namespace, $ba
7889 $ ns = substr ($ class , 0 , $ split );
7990 $ class = substr ($ class , $ split + 1 );
8091 $ namespace = $ base_namespace . '\\' . $ ns ;
81- $ directory = $ base_directory . str_replace ('\\' , ' / ' , $ ns ) . DS ;
92+ $ directory = $ base_directory . str_replace ('\\' , DIRECTORY_SEPARATOR , $ ns ) . DIRECTORY_SEPARATOR ;
8293 }
8394
8495 $ template_data = [
@@ -90,20 +101,22 @@ public function generateModelsFor($schema, $base_directory, $base_namespace, $ba
90101 ];
91102
92103 $ base_model = $ this ->twig ->render ('base-model.phpt ' , $ template_data );
93- $ base_filename = sprintf ( ' %sBase/%s.php ' , $ directory , $ class) ;
104+ $ base_filename = $ directory . ' Base ' . DIRECTORY_SEPARATOR . $ class . ' .php ' ;
94105 $ this ->createDirectory (dirname ($ base_filename ));
95106 $ written = file_put_contents ($ base_filename , $ base_model );
96107
97- if ($ written > 0 )
108+ if ($ written > 0 ) {
98109 $ files_written [] = $ base_filename ;
110+ }
99111
100- $ stub_filename = sprintf ( ' %s%s.php ' , $ directory, $ class) ;
112+ $ stub_filename = $ directory . $ class . ' .php ' ;
101113 if (!file_exists ($ stub_filename )){
102114 $ stub_model = $ this ->twig ->render ('stub-model.phpt ' , $ template_data );
103115 $ written = file_put_contents ($ stub_filename , $ stub_model );
104116
105- if ($ written > 0 )
117+ if ($ written > 0 ) {
106118 $ files_written [] = $ stub_filename ;
119+ }
107120 }
108121
109122 }
@@ -112,15 +125,17 @@ public function generateModelsFor($schema, $base_directory, $base_namespace, $ba
112125
113126 }
114127
115- private function createDirectory ($ directory ){
128+ private function createDirectory (string $ directory ): bool {
116129 if (file_exists ($ directory ) && !is_dir ($ directory )) {
117130 throw new \RuntimeException ("[ {$ directory }] already exists and is not a directory " );
118131 }
119132 else if (!is_dir ($ directory )){
120- @mkdir ($ directory , 0770 , true );
121- if (!is_dir ($ directory ) || !is_writable ($ directory )) {
133+ if (!@mkdir ($ directory , 0770 , true ) && !is_dir ($ directory )) {
122134 throw new \RuntimeException ("Failed to create directory [ {$ directory }] " );
123135 }
136+ if (!is_writable ($ directory )) {
137+ throw new \RuntimeException ("Directory [ {$ directory }] is not writable " );
138+ }
124139 return true ;
125140 }
126141
0 commit comments