Procházet zdrojové kódy

Add --verbose flag to log output of failed response calls, etc

shalvah před 5 roky
rodič
revize
aeb34bdfc8

+ 9 - 5
src/Commands/GenerateDocumentation.php

@@ -6,6 +6,7 @@ use ReflectionClass;
 use ReflectionException;
 use Illuminate\Routing\Route;
 use Illuminate\Console\Command;
+use Mpociot\ApiDoc\Tools\Flags;
 use Mpociot\ApiDoc\Tools\Utils;
 use Mpociot\Reflection\DocBlock;
 use Illuminate\Support\Collection;
@@ -25,6 +26,7 @@ class GenerateDocumentation extends Command
      */
     protected $signature = 'apidoc:generate
                             {--force : Force rewriting of existing routes}
+                            {--verbose : Show verbose output}
     ';
 
     /**
@@ -54,6 +56,9 @@ class GenerateDocumentation extends Command
      */
     public function handle()
     {
+        // Using a global static variable here, so fuck off if you don't like it
+        Flags::$shouldBeVerbose = $this->option('verbose');
+
         $this->docConfig = new DocumentationConfig(config('apidoc'));
 
         try {
@@ -62,13 +67,12 @@ class GenerateDocumentation extends Command
             echo "Warning: Couldn't force base url as your version of Lumen doesn't have the forceRootUrl method.\n";
             echo "You should probably double check URLs in your generated documentation.\n";
         }
+
         $usingDingoRouter = strtolower($this->docConfig->get('router')) == 'dingo';
         $routes = $this->docConfig->get('routes');
-        if ($usingDingoRouter) {
-            $routes = $this->routeMatcher->getDingoRoutesToBeDocumented($routes);
-        } else {
-            $routes = $this->routeMatcher->getLaravelRoutesToBeDocumented($routes);
-        }
+        $routes = $usingDingoRouter
+            ? $this->routeMatcher->getDingoRoutesToBeDocumented($routes)
+            : $this->routeMatcher->getLaravelRoutesToBeDocumented($routes);
 
         $generator = new Generator($this->docConfig);
         $parsedRoutes = $this->processRoutes($generator, $routes);

+ 10 - 0
src/Tools/Flags.php

@@ -0,0 +1,10 @@
+<?php
+
+
+namespace Mpociot\ApiDoc\Tools;
+
+
+class Flags
+{
+    static $shouldBeVerbose = false;
+}

+ 6 - 2
src/Tools/ResponseStrategies/ResponseCallStrategy.php

@@ -6,6 +6,7 @@ use Dingo\Api\Dispatcher;
 use Illuminate\Http\Request;
 use Illuminate\Http\Response;
 use Illuminate\Routing\Route;
+use Mpociot\ApiDoc\Tools\Flags;
 use Mpociot\ApiDoc\Tools\Utils;
 use Mpociot\ApiDoc\Tools\Traits\ParamHelpers;
 
@@ -37,8 +38,11 @@ class ResponseCallStrategy
             $response = [$this->makeApiCall($request)];
         } catch (\Exception $e) {
             echo 'Response call failed for ['.implode(',', $route->methods)."] {$route->uri}";
-            // TODO
-            // echo "Run this again with the --debug flag for details
+            if (Flags::$shouldBeVerbose) {
+                dump($e);
+            } else {
+                echo "Run this again with the --verbose flag for details";
+            }
             $response = null;
         } finally {
             $this->finish();

+ 8 - 0
src/Tools/ResponseStrategies/TransformerTagsStrategy.php

@@ -2,6 +2,7 @@
 
 namespace Mpociot\ApiDoc\Tools\ResponseStrategies;
 
+use Mpociot\ApiDoc\Tools\Flags;
 use ReflectionClass;
 use ReflectionMethod;
 use League\Fractal\Manager;
@@ -108,6 +109,10 @@ class TransformerTagsStrategy
             // try Eloquent model factory
             return factory($type)->make();
         } catch (\Exception $e) {
+            if (Flags::$shouldBeVerbose) {
+                echo "Eloquent model factory failed to instantiate {$type}; trying to fetch from database";
+            }
+
             $instance = new $type;
             if ($instance instanceof \Illuminate\Database\Eloquent\Model) {
                 try {
@@ -118,6 +123,9 @@ class TransformerTagsStrategy
                     }
                 } catch (\Exception $e) {
                     // okay, we'll stick with `new`
+                    if (Flags::$shouldBeVerbose) {
+                        echo "Failed to fetch first {$type} from database; using `new` to instantiate";
+                    }
                 }
             }
         }