diff options
| author | EoleDev <root@serverpc.home> | 2016-03-09 15:37:42 +0100 |
|---|---|---|
| committer | EoleDev <root@serverpc.home> | 2016-03-09 15:37:42 +0100 |
| commit | 1d3ed3af6d57316640c143002ddf80d61e6c098a (patch) | |
| tree | 97ac49bc7ff0f16150aefee821da3557dc0d0644 /server/vendor/php-opencloud/common/src/Common/Api/Operation.php | |
| parent | d69adc4f9d1f6019927de235ef84885c68e6e508 (diff) | |
| parent | 08ea5ef31abcc4e23a39a780cacb64fa27f19194 (diff) | |
Merge branch 'Evan' into develop
Diffstat (limited to 'server/vendor/php-opencloud/common/src/Common/Api/Operation.php')
| -rw-r--r-- | server/vendor/php-opencloud/common/src/Common/Api/Operation.php | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/server/vendor/php-opencloud/common/src/Common/Api/Operation.php b/server/vendor/php-opencloud/common/src/Common/Api/Operation.php new file mode 100644 index 0000000..3155ca4 --- /dev/null +++ b/server/vendor/php-opencloud/common/src/Common/Api/Operation.php @@ -0,0 +1,136 @@ +<?php + +namespace OpenCloud\Common\Api; + +use GuzzleHttp\Utils; + +/** + * This class represents an OpenCloud API operation. It encapsulates most aspects of the REST operation: its HTTP + * method, the URL path, its top-level JSON key, and all of its {@see Parameter} objects. + * + * An operation not only represents a remote operation, but it also provides the mechanism for executing it + * over HTTP. To do this, it uses a {@see ClientInterface} that allows a {@see GuzzleHttp\Message\Request} + * to be created from the user values provided. Once this request is assembled, it is then sent to the + * remote API and the response is returned to whoever first invoked the Operation class. + * + * @package OpenCloud\Common\Api + */ +class Operation +{ + /** @var string The HTTP method */ + private $method; + + /** @var string The URL path */ + private $path; + + /** @var string The top-level JSON key */ + private $jsonKey; + + /** @var []Parameter The parameters of this operation */ + private $params; + + /** + * @param array $definition The data definition (in array form) that will populate this + * operation. Usually this is retrieved from an {@see ApiInterface} + * object method. + */ + public function __construct(array $definition) + { + $this->method = $definition['method']; + $this->path = $definition['path']; + + if (isset($definition['jsonKey'])) { + $this->jsonKey = $definition['jsonKey']; + } + + $this->params = self::toParamArray($definition['params']); + } + + /** + * @return string + */ + public function getPath() + { + return $this->path; + } + + /** + * @return string + */ + public function getMethod() + { + return $this->method; + } + + /** + * Indicates whether this operation supports a parameter. + * + * @param $key The name of a parameter + * + * @return bool + */ + public function hasParam($key) + { + return isset($this->params[$key]); + } + + /** + * @param $name + * + * @return Parameter + */ + public function getParam($name) + { + return isset($this->params[$name]) ? $this->params[$name] : null; + } + + /** + * @return string + */ + public function getJsonKey() + { + return $this->jsonKey; + } + + /** + * A convenience method that will take a generic array of data and convert it into an array of + * {@see Parameter} objects. + * + * @param array $data A generic data array + * + * @return array + */ + public static function toParamArray(array $data) + { + $params = []; + + foreach ($data as $name => $param) { + $params[$name] = new Parameter($param + ['name' => $name]); + } + + return $params; + } + + /** + * This method will validate all of the user-provided values and throw an exception if any + * failures are detected. This is useful for basic sanity-checking before a request is + * serialized and sent to the API. + * + * @param array $userValues The user-defined values + * + * @return bool TRUE if validation passes + * @throws \Exception If validate fails + */ + public function validate(array $userValues) + { + foreach ($this->params as $paramName => $param) { + if (array_key_exists($paramName, $userValues)) { + $param->validate($userValues[$paramName]); + } elseif ($param->isRequired()) { + throw new \Exception(sprintf('"%s" is a required option, but it was not provided', $paramName)); + } + } + + return true; + } +} |
