| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 | 
							- <?php
 
- namespace GuzzleHttp\Command\Guzzle;
 
- use GuzzleHttp\Psr7\Uri;
 
- /**
 
-  * Represents a Guzzle service description
 
-  */
 
- class Description implements DescriptionInterface
 
- {
 
-     /** @var array Array of {@see OperationInterface} objects */
 
-     private $operations = [];
 
-     /** @var array Array of API models */
 
-     private $models = [];
 
-     /** @var string Name of the API */
 
-     private $name;
 
-     /** @var string API version */
 
-     private $apiVersion;
 
-     /** @var string Summary of the API */
 
-     private $description;
 
-     /** @var array Any extra API data */
 
-     private $extraData = [];
 
-     /** @var Uri baseUri/basePath */
 
-     private $baseUri;
 
-     /** @var SchemaFormatter */
 
-     private $formatter;
 
-     /**
 
-      * @param array $config  Service description data
 
-      * @param array $options Custom options to apply to the description
 
-      *     - formatter: Can provide a custom SchemaFormatter class
 
-      *
 
-      * @throws \InvalidArgumentException
 
-      */
 
-     public function __construct(array $config, array $options = [])
 
-     {
 
-         // Keep a list of default keys used in service descriptions that is
 
-         // later used to determine extra data keys.
 
-         static $defaultKeys = ['name', 'models', 'apiVersion', 'description'];
 
-         // Pull in the default configuration values
 
-         foreach ($defaultKeys as $key) {
 
-             if (isset($config[$key])) {
 
-                 $this->{$key} = $config[$key];
 
-             }
 
-         }
 
-         // Set the baseUri
 
-         // Account for the old style of using baseUrl
 
-         if (isset($config['baseUrl'])) {
 
-             $config['baseUri'] = $config['baseUrl'];
 
-         }
 
-         $this->baseUri = isset($config['baseUri']) ? new Uri($config['baseUri']) : new Uri();
 
-         // Ensure that the models and operations properties are always arrays
 
-         $this->models = (array) $this->models;
 
-         $this->operations = (array) $this->operations;
 
-         // We want to add operations differently than adding the other properties
 
-         $defaultKeys[] = 'operations';
 
-         // Create operations for each operation
 
-         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;
 
-             }
 
-         }
 
-         // Get all of the additional properties of the service description and
 
-         // store them in a data array
 
-         foreach (array_diff(array_keys($config), $defaultKeys) as $key) {
 
-             $this->extraData[$key] = $config[$key];
 
-         }
 
-         // Configure the schema formatter
 
-         if (isset($options['formatter'])) {
 
-             $this->formatter = $options['formatter'];
 
-         } else {
 
-             static $defaultFormatter;
 
-             if (!$defaultFormatter) {
 
-                 $defaultFormatter = new SchemaFormatter();
 
-             }
 
-             $this->formatter = $defaultFormatter;
 
-         }
 
-     }
 
-     /**
 
-      * Get the basePath/baseUri of the description
 
-      *
 
-      * @return Uri
 
-      */
 
-     public function getBaseUri()
 
-     {
 
-         return $this->baseUri;
 
-     }
 
-     /**
 
-      * Get the API operations of the service
 
-      *
 
-      * @return Operation[] Returns an array of {@see Operation} objects
 
-      */
 
-     public function getOperations()
 
-     {
 
-         return $this->operations;
 
-     }
 
-     /**
 
-      * Check if the service has an operation by name
 
-      *
 
-      * @param string $name Name of the operation to check
 
-      *
 
-      * @return bool
 
-      */
 
-     public function hasOperation($name)
 
-     {
 
-         return isset($this->operations[$name]);
 
-     }
 
-     /**
 
-      * Get an API operation by name
 
-      *
 
-      * @param string $name Name of the command
 
-      *
 
-      * @return Operation
 
-      * @throws \InvalidArgumentException if the operation is not found
 
-      */
 
-     public function getOperation($name)
 
-     {
 
-         if (!$this->hasOperation($name)) {
 
-             throw new \InvalidArgumentException("No operation found named $name");
 
-         }
 
-         // Lazily create operations as they are retrieved
 
-         if (!($this->operations[$name] instanceof Operation)) {
 
-             $this->operations[$name]['name'] = $name;
 
-             $this->operations[$name] = new Operation($this->operations[$name], $this);
 
-         }
 
-         return $this->operations[$name];
 
-     }
 
-     /**
 
-      * Get a shared definition structure.
 
-      *
 
-      * @param string $id ID/name of the model to retrieve
 
-      *
 
-      * @return Parameter
 
-      * @throws \InvalidArgumentException if the model is not found
 
-      */
 
-     public function getModel($id)
 
-     {
 
-         if (!$this->hasModel($id)) {
 
-             throw new \InvalidArgumentException("No model found named $id");
 
-         }
 
-         // Lazily create models as they are retrieved
 
-         if (!($this->models[$id] instanceof Parameter)) {
 
-             $this->models[$id] = new Parameter(
 
-                 $this->models[$id],
 
-                 ['description' => $this]
 
-             );
 
-         }
 
-         return $this->models[$id];
 
-     }
 
-     /**
 
-      * Get all models of the service description.
 
-      *
 
-      * @return array
 
-      */
 
-     public function getModels()
 
-     {
 
-         $models = [];
 
-         foreach ($this->models as $name => $model) {
 
-             $models[$name] = $this->getModel($name);
 
-         }
 
-         return $models;
 
-     }
 
-     /**
 
-      * Check if the service description has a model by name.
 
-      *
 
-      * @param string $id Name/ID of the model to check
 
-      *
 
-      * @return bool
 
-      */
 
-     public function hasModel($id)
 
-     {
 
-         return isset($this->models[$id]);
 
-     }
 
-     /**
 
-      * Get the API version of the service
 
-      *
 
-      * @return string
 
-      */
 
-     public function getApiVersion()
 
-     {
 
-         return $this->apiVersion;
 
-     }
 
-     /**
 
-      * Get the name of the API
 
-      *
 
-      * @return string
 
-      */
 
-     public function getName()
 
-     {
 
-         return $this->name;
 
-     }
 
-     /**
 
-      * Get a summary of the purpose of the API
 
-      *
 
-      * @return string
 
-      */
 
-     public function getDescription()
 
-     {
 
-         return $this->description;
 
-     }
 
-     /**
 
-      * Format a parameter using named formats.
 
-      *
 
-      * @param string $format Format to convert it to
 
-      * @param mixed  $input  Input string
 
-      *
 
-      * @return mixed
 
-      */
 
-     public function format($format, $input)
 
-     {
 
-         return $this->formatter->format($format, $input);
 
-     }
 
-     /**
 
-      * Get arbitrary data from the service description that is not part of the
 
-      * Guzzle service description specification.
 
-      *
 
-      * @param string $key Data key to retrieve or null to retrieve all extra
 
-      *
 
-      * @return null|mixed
 
-      */
 
-     public function getData($key = null)
 
-     {
 
-         if ($key === null) {
 
-             return $this->extraData;
 
-         } elseif (isset($this->extraData[$key])) {
 
-             return $this->extraData[$key];
 
-         } else {
 
-             return null;
 
-         }
 
-     }
 
- }
 
 
  |