Skip to content

Commit

Permalink
Moves around structure, enforces interface for parsers
Browse files Browse the repository at this point in the history
  • Loading branch information
jacobemerick committed Nov 18, 2016
1 parent 1920152 commit f37351d
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 21 deletions.
36 changes: 24 additions & 12 deletions src/ParameterParser.php
Expand Up @@ -16,36 +16,48 @@ class ParameterParser
* @return mixed
*/
public function __invoke(Request $request, array $parameter, $route)
{
$parser = $this->getParser($request, $parameter, $route);
$value = $parser->getValue($request, $parameter);

if (!isset($value) && isset($parameter['default'])) {
$value = $parameter['default'];
}

$value = $this->castType($value, $parameter);
return $value;
}

/**
* @param Request $request
* @param array $parameter
* @param string $route
* @return ParserInterface
*/
protected function getParser(Request $request, array $parameter, $route)
{
switch ($parameter['in']) {
case 'query':
$query = new Parameter\Query;
$value = $query($request, $parameter);
$parser = new Parser\Query($request, $parameter);
break;
case 'header':
$value = $this->getHeaderValue($request, $parameter);
$parser = new Parser\Header($request, $parameter);
break;
case 'path':
$value = $this->getPathValue($request, $parameter, $route);
$parser = new Parser\Path($request, $parameter, $route);
break;
case 'formData':
// todo implement form parameters
throw new \Exception('Form parameters are not yet implemented');
break;
case 'body':
$value = $this->getBodyValue($request);
$parser = new Parser\Body($request);
break;
default:
throw new \Exception('Invalid parameter type defined in swagger');
break;
}

if (!isset($value) && isset($parameter['default'])) {
$value = $parameter['default'];
}

$value = $this->castType($value, $parameter);
return $value;
return $parser;
}

/**
Expand Down
8 changes: 8 additions & 0 deletions src/Parser/ParserInterface.php
@@ -0,0 +1,8 @@
<?php

namespace AvalancheDevelopment\SwaggerRouterMiddleware\Parser;

interface ParserInterface
{
public function getValue();
}
32 changes: 23 additions & 9 deletions src/Parameter/Query.php → src/Parser/Query.php
@@ -1,33 +1,47 @@
<?php

namespace AvalancheDevelopment\SwaggerRouterMiddleware\Parameter;
namespace AvalancheDevelopment\SwaggerRouterMiddleware\Parser;

use Exception;
use Psr\Http\Message\RequestInterface as Request;

class Query
class Query implements ParserInterface
{

/** @var Request */
protected $request;

/** @var array */
protected $parameter;

/**
* @param Request $request
* @param array $parameter
*/
public function __construct(Request $request, array $parameter)
{
$this->request = $request;
$this->parameter = $parameter;
}

/**
* @return mixed
*/
public function __invoke(Request $request, array $parameter)
public function getValue()
{
$query = $this->parseQueryString($request);
if (!array_key_exists($parameter['name'], $query)) {
$query = $this->parseQueryString($this->request);
if (!array_key_exists($this->parameter['name'], $query)) {
return;
}

$value = $query[$parameter['name']];
if ($parameter['type'] !== 'array') {
$value = $query[$this->parameter['name']];
if ($this->parameter['type'] !== 'array') {
return $value;
}
if (isset($parameter['collectionFormat']) && $parameter['collectionFormat'] === 'multi') {
if (isset($this->parameter['collectionFormat']) && $this->parameter['collectionFormat'] === 'multi') {
return (array) $value;
}
return $this->explodeValue($value, $parameter);
return $this->explodeValue($value, $this->parameter);
}

/**
Expand Down

0 comments on commit f37351d

Please sign in to comment.