瀏覽代碼

Added faker for better dummy data

Marcel Pociot 9 年之前
父節點
當前提交
627fc8d22a
共有 4 個文件被更改,包括 30 次插入6 次删除
  1. 2 1
      composer.json
  2. 27 1
      src/Mpociot/ApiDoc/ApiDocGenerator.php
  3. 1 1
      src/resources/views/documentarian.blade.php
  4. 0 3
      tests/ApiDocGeneratorTest.php

+ 2 - 1
composer.json

@@ -14,7 +14,8 @@
     "php": ">=7.0.0",
     "laravel/framework": "~5.0",
     "phpdocumentor/reflection-docblock": "~2.0",
-    "mpociot/documentarian": "^0.2.0"
+    "mpociot/documentarian": "^0.2.0",
+    "fzaninotto/faker": "^1.6"
   },
   "require-dev": {
     "phpunit/phpunit": "~5.0",

+ 27 - 1
src/Mpociot/ApiDoc/ApiDocGenerator.php

@@ -2,6 +2,7 @@
 
 namespace Mpociot\ApiDoc;
 
+use Faker\Factory;
 use Illuminate\Foundation\Http\FormRequest;
 use Illuminate\Routing\Route;
 use Illuminate\Support\Facades\App;
@@ -38,6 +39,7 @@ class ApiDocGenerator
                 'required' => false,
                 'type' => 'string',
                 'default' => '',
+                'value' => '',
                 'description' => []
             ];
             foreach ($rules as $rule) {
@@ -128,6 +130,8 @@ class ApiDocGenerator
      */
     protected function parseRule($rule, &$attributeData)
     {
+        $faker = Factory::create();
+
         $parsedRule = $this->parseStringRule($rule);
         $parsedRule[0] = $this->normalizeRule($parsedRule[0]);
         list($rule, $parameters) = $parsedRule;
@@ -139,13 +143,16 @@ class ApiDocGenerator
             case 'accepted':
                 $attributeData['required'] = true;
                 $attributeData['type'] = 'boolean';
+                $attributeData['value'] = $faker->url;
                 break;
             case 'after':
                 $attributeData['type'] = 'date';
                 $attributeData['description'][] = 'Must be a date after: `' . date(DATE_RFC850, strtotime($parameters[0])) . '`';
+                $attributeData['value'] = date(DATE_RFC850, strtotime('+1 day',strtotime($parameters[0])));
                 break;
             case 'alpha':
                 $attributeData['description'][] = 'Only alphabetic characters allowed';
+                $attributeData['value'] = $faker->word;
                 break;
             case 'alpha_dash':
                 $attributeData['description'][] = 'Allowed: alpha-numeric characters, as well as dashes and underscores.';
@@ -155,9 +162,11 @@ class ApiDocGenerator
                 break;
             case 'in':
                 $attributeData['description'][] = $this->fancyImplode($parameters, ', ', ' or ');
+                $attributeData['value'] = $faker->randomElement($parameters);
                 break;
             case 'not_in':
                 $attributeData['description'][] = 'Not in: ' . $this->fancyImplode($parameters, ', ', ' or ');
+                $attributeData['value'] = $faker->word;
                 break;
             case 'min':
                 $attributeData['description'][] = 'Minimum: `' . $parameters[0] . '`';
@@ -168,10 +177,12 @@ class ApiDocGenerator
             case 'between':
                 $attributeData['type'] = 'numeric';
                 $attributeData['description'][] = 'Between: `' . $parameters[0] . '` and `' . $parameters[1] . '`';
+                $attributeData['value'] = $faker->numberBetween($parameters[0], $parameters[1]);
                 break;
             case 'before':
                 $attributeData['type'] = 'date';
                 $attributeData['description'][] = 'Must be a date preceding: `' . date(DATE_RFC850, strtotime($parameters[0])) . '`';
+                $attributeData['value'] = date(DATE_RFC850, strtotime('-1 day',strtotime($parameters[0])));
                 break;
             case 'date_format':
                 $attributeData['type'] = 'date';
@@ -183,17 +194,20 @@ class ApiDocGenerator
             case 'digits':
                 $attributeData['type'] = 'numeric';
                 $attributeData['description'][] = 'Must have an exact length of `' . $parameters[0] . '`';
+                $attributeData['value'] = $faker->randomNumber($parameters[0], true);
                 break;
             case 'digits_between':
                 $attributeData['type'] = 'numeric';
                 $attributeData['description'][] = 'Must have a length between `' . $parameters[0] . '` and `' . $parameters[1] . '`';
                 break;
             case 'image':
+                $attributeData['type'] = 'image';
                 $attributeData['description'][] = 'Must be an image (jpeg, png, bmp, gif, or svg)';
                 break;
             case 'json':
                 $attributeData['type'] = 'string';
                 $attributeData['description'][] = 'Must be a valid JSON string.';
+                $attributeData['value'] = json_encode(['foo','bar','baz']);
                 break;
             case 'mimetypes':
             case 'mimes':
@@ -225,29 +239,41 @@ class ApiDocGenerator
                 break;
             case 'timezone':
                 $attributeData['description'][] = 'Must be a valid timezone identifier';
+                $attributeData['value'] = $faker->timezone;
                 break;
             case 'exists':
                 $attributeData['description'][] = 'Valid ' . Str::singular($parameters[0]) . ' ' . $parameters[1];
                 break;
             case 'active_url':
                 $attributeData['type'] = 'url';
+                $attributeData['value'] = $faker->url;
                 break;
             case 'regex':
                 $attributeData['type'] = 'string';
                 $attributeData['description'][] = 'Must match this regular expression: `' . $parameters[0] . '`';
                 break;
             case 'boolean':
+                $attributeData['value'] = $faker->boolean();
             case 'array':
+                $attributeData['value'] = $faker->word;
             case 'date':
+                $attributeData['value'] = $faker->date();
             case 'email':
-            case 'image':
+                $attributeData['value'] = $faker->safeEmail;
             case 'string':
+                $attributeData['value'] = $faker->word;
             case 'integer':
+                $attributeData['value'] = $faker->randomNumber();
             case 'numeric':
+                $attributeData['value'] = $faker->randomNumber();
             case 'url':
+                $attributeData['value'] = $faker->url;
             case 'ip':
                 $attributeData['type'] = $rule;
                 break;
+            default:
+                $attributeData['value'] = $faker->word;
+            break;
         }
     }
 

+ 1 - 1
src/resources/views/documentarian.blade.php

@@ -33,7 +33,7 @@ Welcome to the generated API reference.
 curl "{{config('app.url')}}/{{$parsedRoute['uri']}}" \
 -H "Accept: application/json"@if(count($parsedRoute['parameters'])) \
 @foreach($parsedRoute['parameters'] as $attribute => $parameter)
--d "{{$attribute}}"="dummy" \
+-d "{{$attribute}}"="{{$parameter['value']}}" \
 @endforeach
 @endif
 

+ 0 - 3
tests/ApiDocGeneratorTest.php

@@ -76,14 +76,11 @@ class ApiDocGeneratorTest extends Orchestra\Testbench\TestCase
                     $this->assertEquals( 'string', $attribute['type'] );
                     $this->assertCount( 0, $attribute['description'] );
                     break;
-
-
                 case 'accepted':
                     $this->assertTrue( $attribute['required'] );
                     $this->assertEquals( 'boolean', $attribute['type'] );
                     $this->assertCount( 0, $attribute['description'] );
                     break;
-
                 case 'active_url':
                     $this->assertFalse( $attribute['required'] );
                     $this->assertEquals( 'url', $attribute['type'] );