<?php
namespace GuzzleHttp\Command\Guzzle;
use GuzzleHttp\Psr7\Uri;
class Description implements DescriptionInterface
{
private $operations = [];
private $models = [];
private $name;
private $apiVersion;
private $description;
private $extraData = [];
private $baseUri;
private $formatter;
public function __construct(array $config, array $options = [])
{
static $defaultKeys = ['name', 'models', 'apiVersion', 'description'];
foreach ($defaultKeys as $key) {
if (isset($config[$key])) {
$this->{$key} = $config[$key];
}
}
if (isset($config['baseUrl'])) {
$config['baseUri'] = $config['baseUrl'];
}
$this->baseUri = isset($config['baseUri']) ? new Uri($config['baseUri']) : new Uri();
$this->models = (array) $this->models;
$this->operations = (array) $this->operations;
$defaultKeys[] = 'operations';
if (isset($config['operations'])) {
foreach ($config['operations'] as $name => $operation) {
if (!is_array($operation)) {
throw new \InvalidArgumentException('Operations must be arrays');
}
$this->operations[$name] = $operation;
}
}
foreach (array_diff(array_keys($config), $defaultKeys) as $key) {
$this->extraData[$key] = $config[$key];
}
if (isset($options['formatter'])) {
$this->formatter = $options['formatter'];
} else {
static $defaultFormatter;
if (!$defaultFormatter) {
$defaultFormatter = new SchemaFormatter();
}
$this->formatter = $defaultFormatter;
}
}
public function getBaseUri()
{
return $this->baseUri;
}
public function getOperations()
{
return $this->operations;
}
public function hasOperation($name)
{
return isset($this->operations[$name]);
}
public function getOperation($name)
{
if (!$this->hasOperation($name)) {
throw new \InvalidArgumentException("No operation found named $name");
}
if (!($this->operations[$name] instanceof Operation)) {
$this->operations[$name]['name'] = $name;
$this->operations[$name] = new Operation($this->operations[$name], $this);
}
return $this->operations[$name];
}
public function getModel($id)
{
if (!$this->hasModel($id)) {
throw new \InvalidArgumentException("No model found named $id");
}
if (!($this->models[$id] instanceof Parameter)) {
$this->models[$id] = new Parameter(
$this->models[$id],
['description' => $this]
);
}
return $this->models[$id];
}
public function getModels()
{
$models = [];
foreach ($this->models as $name => $model) {
$models[$name] = $this->getModel($name);
}
return $models;
}
public function hasModel($id)
{
return isset($this->models[$id]);
}
public function getApiVersion()
{
return $this->apiVersion;
}
public function getName()
{
return $this->name;
}
public function getDescription()
{
return $this->description;
}
public function format($format, $input)
{
return $this->formatter->format($format, $input);
}
public function getData($key = null)
{
if ($key === null) {
return $this->extraData;
} elseif (isset($this->extraData[$key])) {
return $this->extraData[$key];
} else {
return null;
}
}
}