Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 3 additions & 11 deletions src/Mpociot/ApiDoc/Commands/GenerateDocumentation.php
Original file line number Diff line number Diff line change
Expand Up @@ -89,17 +89,9 @@ public function handle()

$parsedRoutes = [];

if ($this->option('router') === 'laravel') {
foreach ($routeDomains as $routeDomain) {
foreach ($routePrefixes as $routePrefix) {
$parsedRoutes += $this->processRoutes($generator, $allowedRoutes, $routeDomain, $routePrefix, $middleware);
}
}
} else {
foreach ($routeDomains as $routeDomain) {
foreach ($routePrefixes as $routePrefix) {
$parsedRoutes += $this->processDingoRoutes($generator, $allowedRoutes, $routeDomain, $routePrefix, $middleware);
}
foreach ($routeDomains as $routeDomain) {
foreach ($routePrefixes as $routePrefix) {
$parsedRoutes += $this->processRoutes($generator, $allowedRoutes, $routeDomain, $routePrefix, $middleware);
}
}
$parsedRoutes = collect($parsedRoutes)->groupBy('resource')->sort(function ($a, $b) {
Expand Down
32 changes: 19 additions & 13 deletions src/Mpociot/ApiDoc/Generators/AbstractGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,8 @@ protected function getDocblockResponse($tags)
*/
protected function getParameters($routeData, $routeAction, $bindings)
{
$rules = $this->simplifyRules($this->getRouteRules($routeData['methods'], $routeAction['uses'], $bindings));
$validationRules = $this->getRouteValidationRules($routeData['methods'], $routeAction['uses'], $bindings);
$rules = $this->simplifyRules($validationRules);

foreach ($rules as $attribute => $ruleset) {
$attributeData = [
Expand All @@ -168,27 +169,32 @@ protected function getParameters($routeData, $routeAction, $bindings)
}

/**
* Format the validation rules as plain array.
* Format the validation rules as a plain array.
*
* @param array $rules
*
* @return array
*/
protected function simplifyRules($rules)
{
$simplifiedRules = Validator::make([], $rules)->getRules();
// this will split all string rules into arrays of strings
$rules = Validator::make([], $rules)->getRules();

if (count($simplifiedRules) === 0) {
return $simplifiedRules;
if (count($rules) === 0) {
return $rules;
}

$values = collect($simplifiedRules)
// Laravel will ignore the nested array rules unless the key referenced exists and is an array
// So we'll to create an empty array for each array attribute
$values = collect($rules)
->filter(function ($values) {
return in_array('array', $values);
})->map(function ($val, $key) {
return [''];
})->all();

// Now this will return the complete ruleset.
// Nested array parameters will be present, with '*' replaced by '0'
return Validator::make($values, $rules)->getRules();
}

Expand Down Expand Up @@ -287,10 +293,10 @@ protected function getRouteGroup($route)
*
* @return array
*/
protected function getRouteRules(array $routeMethods, $routeAction, $bindings)
protected function getRouteValidationRules(array $routeMethods, $routeAction, $bindings)
{
list($class, $method) = explode('@', $routeAction);
$reflection = new ReflectionClass($class);
list($controller, $method) = explode('@', $routeAction);
$reflection = new ReflectionClass($controller);
$reflectionMethod = $reflection->getMethod($method);

foreach ($reflectionMethod->getParameters() as $parameter) {
Expand Down Expand Up @@ -357,13 +363,13 @@ protected function splitValuePairs($parameters, $first = 'is ', $last = 'or ')

/**
* @param string $rule
* @param string $ruleName
* @param string $attribute
* @param array $attributeData
* @param int $seed
*
* @return void
*/
protected function parseRule($rule, $ruleName, &$attributeData, $seed, $routeData)
protected function parseRule($rule, $attribute, &$attributeData, $seed, $routeData)
{
$faker = Factory::create();
$faker->seed(crc32($seed));
Expand Down Expand Up @@ -510,7 +516,7 @@ protected function parseRule($rule, $ruleName, &$attributeData, $seed, $routeDat
$attributeData['value'] = $faker->timezone;
break;
case 'exists':
$fieldName = isset($parameters[1]) ? $parameters[1] : $ruleName;
$fieldName = isset($parameters[1]) ? $parameters[1] : $attribute;
$attributeData['description'][] = Description::parse($rule)->with([Str::singular($parameters[0]), $fieldName])->getDescription();
break;
case 'active_url':
Expand Down Expand Up @@ -627,7 +633,7 @@ protected function parseStringRule($rules)

// The format for specifying validation rules and parameters follows an
// easy {rule}:{parameters} formatting convention. For instance the
// rule "Max:3" states that the value may only be three letters.
// rule "max:3" states that the value may only be three letters.
if (strpos($rules, ':') !== false) {
list($rules, $parameter) = explode(':', $rules, 2);

Expand Down
4 changes: 2 additions & 2 deletions tests/RuleDescriptionParserTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ protected function getPackageProviders($app)
*/
protected function getEnvironmentSetUp($app)
{
$app['config']->set('app.locale', 'es'); // Just to be different to default language.
$app['config']->set('app.fallback_locale', 'ch'); // Just to be different to default language.
$app['config']->set('app.locale', 'es'); // Just to be different from default language.
$app['config']->set('app.fallback_locale', 'ch'); // Just to be different from default language.
}
}