Skip to content

Commit c8675a9

Browse files
Merge pull request #52 from RonasIT/49_update_description_generating_logic
#49:- update description generating logic;
2 parents 2ee04e7 + 3022100 commit c8675a9

File tree

1 file changed

+39
-20
lines changed

1 file changed

+39
-20
lines changed

src/Services/SwaggerService.php

Lines changed: 39 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,16 @@ class SwaggerService
3737
private $item;
3838
private $security;
3939

40+
protected $rulesOfTypes = [
41+
'array' => 'object',
42+
'boolean' => 'boolean',
43+
'date' => 'date',
44+
'digits' => 'integer',
45+
'integer' => 'integer',
46+
'numeric' => 'double',
47+
'string' => 'string'
48+
];
49+
4050
public function __construct(Container $container)
4151
{
4252
$this->initConfig();
@@ -313,22 +323,27 @@ protected function saveParameters($request, array $annotations)
313323
$formRequest->setUserResolver($this->request->getUserResolver());
314324
$formRequest->setRouteResolver($this->request->getRouteResolver());
315325
$rules = method_exists($formRequest, 'rules') ? $formRequest->rules() : [];
326+
$attributes = method_exists($formRequest, 'attributes') ? $formRequest->attributes() : [];
316327

317328
$actionName = $this->getActionName($this->uri);
318329

319330
if (in_array($this->method, ['get', 'delete'])) {
320-
$this->saveGetRequestParameters($rules, $annotations);
331+
$this->saveGetRequestParameters($rules, $attributes, $annotations);
321332
} else {
322-
$this->savePostRequestParameters($actionName, $rules, $annotations);
333+
$this->savePostRequestParameters($actionName, $rules, $attributes, $annotations);
323334
}
324335
}
325336

326-
protected function saveGetRequestParameters($rules, array $annotations)
337+
protected function saveGetRequestParameters($rules, array $attributes, array $annotations)
327338
{
328339
foreach ($rules as $parameter => $rule) {
329340
$validation = explode('|', $rule);
330341

331-
$description = Arr::get($annotations, $parameter, implode(', ', $validation));
342+
$description = Arr::get($annotations, $parameter);
343+
344+
if (empty($description)) {
345+
$description = Arr::get($attributes, $parameter, implode(', ', $validation));
346+
}
332347

333348
$existedParameter = Arr::first($this->item['parameters'], function ($existedParameter) use ($parameter) {
334349
return $existedParameter['name'] == $parameter;
@@ -350,7 +365,7 @@ protected function saveGetRequestParameters($rules, array $annotations)
350365
}
351366
}
352367

353-
protected function savePostRequestParameters($actionName, $rules, array $annotations)
368+
protected function savePostRequestParameters($actionName, $rules, array $attributes, array $annotations)
354369
{
355370
if ($this->requestHasMoreProperties($actionName)) {
356371
if ($this->requestHasBody()) {
@@ -365,25 +380,32 @@ protected function savePostRequestParameters($actionName, $rules, array $annotat
365380
];
366381
}
367382

368-
$this->saveDefinitions($actionName, $rules, $annotations);
383+
$this->saveDefinitions($actionName, $rules, $attributes, $annotations);
369384
}
370385
}
371386

372-
protected function saveDefinitions($objectName, $rules, array $annotations)
387+
protected function saveDefinitions($objectName, $rules, $attributes, array $annotations)
373388
{
374389
$data = [
375390
'type' => 'object',
376391
'properties' => []
377392
];
393+
378394
foreach ($rules as $parameter => $rule) {
379395
$rulesArray = (is_array($rule)) ? $rule : explode('|', $rule);
380396
$parameterType = $this->getParameterType($rulesArray);
381397
$this->saveParameterType($data, $parameter, $parameterType);
382-
$this->saveParameterDescription($data, $parameter, $rulesArray, $annotations);
398+
399+
$uselessRules = $this->rulesOfTypes;
400+
$uselessRules['required'] = 'required';
383401

384402
if (in_array('required', $rulesArray)) {
385403
$data['required'][] = $parameter;
386404
}
405+
406+
$rulesArray = array_diff_key(array_flip($rulesArray), $uselessRules);
407+
408+
$this->saveParameterDescription($data, $parameter, $rulesArray, $attributes, $annotations);
387409
}
388410

389411
$data['example'] = $this->generateExample($data['properties']);
@@ -392,16 +414,8 @@ protected function saveDefinitions($objectName, $rules, array $annotations)
392414

393415
protected function getParameterType(array $validation): string
394416
{
395-
$validationRules = [
396-
'array' => 'object',
397-
'boolean' => 'boolean',
398-
'date' => 'date',
399-
'digits' => 'integer',
400-
'email' => 'string',
401-
'integer' => 'integer',
402-
'numeric' => 'double',
403-
'string' => 'string'
404-
];
417+
$validationRules = $this->rulesOfTypes;
418+
$validationRules['email'] = 'string';
405419

406420
$parameterType = 'string';
407421

@@ -421,9 +435,14 @@ protected function saveParameterType(&$data, $parameter, $parameterType)
421435
];
422436
}
423437

424-
protected function saveParameterDescription(&$data, $parameter, array $rulesArray, array $annotations)
438+
protected function saveParameterDescription(&$data, $parameter, array $rulesArray, array $attributes, array $annotations)
425439
{
426-
$description = Arr::get($annotations, $parameter, implode(', ', $rulesArray));
440+
$description = Arr::get($annotations, $parameter);
441+
442+
if (empty($description)) {
443+
$description = Arr::get($attributes, $parameter, implode(', ', $rulesArray));
444+
}
445+
427446
$data['properties'][$parameter]['description'] = $description;
428447
}
429448

0 commit comments

Comments
 (0)