@@ -19,6 +19,13 @@ abstract class AbstractTypeGenerator extends AbstractClassGenerator
1919{
2020 const DEFAULT_CLASS_NAMESPACE = 'Overblog \\CG \\GraphQLGenerator \\__Schema__ ' ;
2121
22+ const MODE_DRY_RUN = 1 ;
23+ const MODE_MAPPING_ONLY = 2 ;
24+ const MODE_WRITE = 4 ;
25+ const MODE_OVERRIDE = 8 ;
26+
27+ protected static $ deferredPlaceHolders = ['useStatement ' , 'spaces ' , 'closureUseStatements ' ];
28+
2229 protected static $ closureTemplate = <<<EOF
2330function (%s) <closureUseStatements>{
2431<spaces><spaces>return %s;
@@ -308,45 +315,61 @@ protected function arrayKeyExistsAndIsNotNull(array $value, $key)
308315 * ]
309316 * </code>
310317 *
311- * @param array $configs
312- * @param string $outputDirectory
313- * @param bool $regenerateIfExists
318+ * @param array $configs
319+ * @param string $outputDirectory
320+ * @param int|bool $mode
321+ *
314322 * @return array
315323 */
316- public function generateClasses (array $ configs , $ outputDirectory , $ regenerateIfExists = false )
324+ public function generateClasses (array $ configs , $ outputDirectory , $ mode = false )
317325 {
318326 $ classesMap = [];
319327
320328 foreach ($ configs as $ name => $ config ) {
321329 $ config ['config ' ]['name ' ] = isset ($ config ['config ' ]['name ' ]) ? $ config ['config ' ]['name ' ] : $ name ;
322- $ classMap = $ this ->generateClass ($ config , $ outputDirectory , $ regenerateIfExists );
330+ $ classMap = $ this ->generateClass ($ config , $ outputDirectory , $ mode );
323331
324332 $ classesMap = array_merge ($ classesMap , $ classMap );
325333 }
326334
327335 return $ classesMap ;
328336 }
329337
330- public function generateClass (array $ config , $ outputDirectory , $ regenerateIfExists = false )
338+ /**
339+ * @param array $config
340+ * @param string $outputDirectory
341+ * @param int|bool $mode true consider as MODE_WRITE|MODE_OVERRIDE and false as MODE_WRITE
342+ *
343+ * @return array
344+ */
345+ public function generateClass (array $ config , $ outputDirectory , $ mode = false )
331346 {
332- static $ treatLater = ['useStatement ' , 'spaces ' , 'closureUseStatements ' ];
333- $ this ->clearInternalUseStatements ();
334- $ code = $ this ->processTemplatePlaceHoldersReplacements ('TypeSystem ' , $ config , $ treatLater );
335- $ code = $ this ->processPlaceHoldersReplacements ($ treatLater , $ code , $ config ) . "\n" ;
347+ if (true === $ mode ) {
348+ $ mode = self ::MODE_WRITE |self ::MODE_OVERRIDE ;
349+ } elseif (false === $ mode ) {
350+ $ mode = self ::MODE_WRITE ;
351+ }
336352
337353 $ className = $ this ->generateClassName ($ config );
338-
339354 $ path = $ outputDirectory . '/ ' . $ className . '.php ' ;
340- $ dir = dirname ($ path );
341355
342- if (!is_dir ($ dir )) {
343- mkdir ($ dir , 0775 , true );
344- }
345- if ($ regenerateIfExists || !file_exists ($ path )) {
346- file_put_contents ($ path , $ code );
347- chmod ($ path , 0664 );
356+ if (!($ mode & self ::MODE_MAPPING_ONLY )) {
357+ $ this ->clearInternalUseStatements ();
358+ $ code = $ this ->processTemplatePlaceHoldersReplacements ('TypeSystem ' , $ config , static ::$ deferredPlaceHolders );
359+ $ code = $ this ->processPlaceHoldersReplacements (static ::$ deferredPlaceHolders , $ code , $ config ) . "\n" ;
360+
361+ if ($ mode & self ::MODE_WRITE ) {
362+ $ dir = dirname ($ path );
363+ if (!is_dir ($ dir )) {
364+ mkdir ($ dir , 0775 , true );
365+ }
366+ if (($ mode & self ::MODE_OVERRIDE ) || !file_exists ($ path )) {
367+ file_put_contents ($ path , $ code );
368+ chmod ($ path , 0664 );
369+ }
370+ }
348371 }
349372
350- return [$ this ->getClassNamespace ().'\\' .$ className => realpath ( $ path) ];
373+ return [$ this ->getClassNamespace ().'\\' .$ className => $ path ];
351374 }
352375}
0 commit comments