You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
2.8 KiB
101 lines
2.8 KiB
<?php
|
|
namespace GuzzleHttp\Command\Guzzle\RequestLocation;
|
|
|
|
use GuzzleHttp\Command\CommandInterface;
|
|
use GuzzleHttp\Command\Guzzle\Operation;
|
|
use GuzzleHttp\Command\Guzzle\Parameter;
|
|
use Psr\Http\Message\RequestInterface;
|
|
|
|
abstract class AbstractLocation implements RequestLocationInterface
|
|
{
|
|
/** @var string */
|
|
protected $locationName;
|
|
|
|
/**
|
|
* Set the name of the location
|
|
*
|
|
* @param $locationName
|
|
*/
|
|
public function __construct($locationName)
|
|
{
|
|
$this->locationName = $locationName;
|
|
}
|
|
|
|
/**
|
|
* @param CommandInterface $command
|
|
* @param RequestInterface $request
|
|
* @param Parameter $param
|
|
* @return RequestInterface
|
|
*/
|
|
public function visit(
|
|
CommandInterface $command,
|
|
RequestInterface $request,
|
|
Parameter $param
|
|
) {
|
|
return $request;
|
|
}
|
|
|
|
/**
|
|
* @param CommandInterface $command
|
|
* @param RequestInterface $request
|
|
* @param Operation $operation
|
|
* @return RequestInterface
|
|
*/
|
|
public function after(
|
|
CommandInterface $command,
|
|
RequestInterface $request,
|
|
Operation $operation
|
|
) {
|
|
return $request;
|
|
}
|
|
|
|
/**
|
|
* Prepare (filter and set desired name for request item) the value for
|
|
* request.
|
|
*
|
|
* @param mixed $value
|
|
* @param Parameter $param
|
|
*
|
|
* @return array|mixed
|
|
*/
|
|
protected function prepareValue($value, Parameter $param)
|
|
{
|
|
return is_array($value)
|
|
? $this->resolveRecursively($value, $param)
|
|
: $param->filter($value);
|
|
}
|
|
|
|
/**
|
|
* Recursively prepare and filter nested values.
|
|
*
|
|
* @param array $value Value to map
|
|
* @param Parameter $param Parameter related to the current key.
|
|
*
|
|
* @return array Returns the mapped array
|
|
*/
|
|
protected function resolveRecursively(array $value, Parameter $param)
|
|
{
|
|
foreach ($value as $name => &$v) {
|
|
switch ($param->getType()) {
|
|
case 'object':
|
|
if ($subParam = $param->getProperty($name)) {
|
|
$key = $subParam->getWireName();
|
|
$value[$key] = $this->prepareValue($v, $subParam);
|
|
if ($name != $key) {
|
|
unset($value[$name]);
|
|
}
|
|
} elseif ($param->getAdditionalProperties() instanceof Parameter) {
|
|
$v = $this->prepareValue($v, $param->getAdditionalProperties());
|
|
}
|
|
break;
|
|
case 'array':
|
|
if ($items = $param->getItems()) {
|
|
$v = $this->prepareValue($v, $items);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
return $param->filter($value);
|
|
}
|
|
}
|
|
|