summaryrefslogtreecommitdiff
path: root/server/vendor/php-opencloud/common/src/Common/Api/Operation.php
diff options
context:
space:
mode:
authorEoleDev <root@serverpc.home>2016-03-09 16:17:33 +0100
committerEoleDev <root@serverpc.home>2016-03-09 16:17:33 +0100
commit2b8decb81faeb7928bcbfda84c6f33a003f707fd (patch)
tree0e491d7ae2bf91347b1cf50d2c475625d8f659b4 /server/vendor/php-opencloud/common/src/Common/Api/Operation.php
parentb7ebe1272c1127df290535af2430622b28160bb0 (diff)
parent03ef74d0cfe675a6e18a91f039182ca1b248d8f5 (diff)
Maj Library
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.php136
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;
+ }
+}