summaryrefslogtreecommitdiff
path: root/vendor/aws/aws-sdk-php/src/EndpointV2/Ruleset/Ruleset.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/aws/aws-sdk-php/src/EndpointV2/Ruleset/Ruleset.php')
-rw-r--r--vendor/aws/aws-sdk-php/src/EndpointV2/Ruleset/Ruleset.php117
1 files changed, 117 insertions, 0 deletions
diff --git a/vendor/aws/aws-sdk-php/src/EndpointV2/Ruleset/Ruleset.php b/vendor/aws/aws-sdk-php/src/EndpointV2/Ruleset/Ruleset.php
new file mode 100644
index 0000000..aa4d26e
--- /dev/null
+++ b/vendor/aws/aws-sdk-php/src/EndpointV2/Ruleset/Ruleset.php
@@ -0,0 +1,117 @@
+<?php
+
+namespace Aws\EndpointV2\Ruleset;
+
+use Aws\EndpointV2\Rule\RuleCreator;
+
+/**
+ * A collection of rules, parameter definitions and a class of helper functions
+ * used to resolve either an endpoint or an error.
+ */
+Class Ruleset
+{
+ /** @var string */
+ private $version;
+
+ /** @var array */
+ private $parameters;
+
+ /** @var array */
+ private $rules;
+
+ /** @var RulesetStandardLibrary */
+ public $standardLibrary;
+
+ public function __construct(array $ruleset, array $partitions)
+ {
+ $this->version = $ruleset['version'];
+ $this->parameters = $this->createParameters($ruleset['parameters']);
+ $this->rules = $this->createRules($ruleset['rules']);
+ $this->standardLibrary = new RulesetStandardLibrary($partitions);
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getVersion()
+ {
+ return $this->version;
+ }
+
+ /**
+ * @return array
+ */
+ public function getParameters()
+ {
+ return $this->parameters;
+ }
+
+ /**
+ * @return array
+ */
+ public function getRules()
+ {
+ return $this->rules;
+ }
+
+ /**
+ * Evaluate the ruleset against the input parameters.
+ * Return the first rule the parameters match against.
+ *
+ * @return mixed
+ */
+ public function evaluate(array $inputParameters)
+ {
+ $this->validateInputParameters($inputParameters);
+
+ foreach($this->rules as $rule) {
+ $evaluation = $rule->evaluate($inputParameters, $this->standardLibrary);
+ if ($evaluation !== false) {
+ return $evaluation;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Ensures all corresponding client-provided parameters match
+ * the Ruleset parameter's specified type.
+ *
+ * @return void
+ */
+ private function validateInputParameters(array &$inputParameters)
+ {
+ foreach($this->parameters as $paramName => $param) {
+ $inputParam = isset($inputParameters[$paramName]) ? $inputParameters[$paramName] : null;
+
+ if (is_null($inputParam) && !is_null($param->getDefault())) {
+ $inputParameters[$paramName] = $param->getDefault();
+ } elseif (!is_null($inputParam)) {
+ $param->validateInputParam($inputParam);
+ }
+ }
+ }
+
+ private function createParameters(array $parameters)
+ {
+ $parameterList = [];
+
+ foreach($parameters as $name => $definition) {
+ $parameterList[$name] = new RulesetParameter($name, $definition);
+ }
+
+ return $parameterList;
+ }
+
+ private function createRules(array $rules)
+ {
+ $rulesList = [];
+
+ forEach($rules as $rule) {
+ $ruleObj = RuleCreator::create($rule['type'], $rule);
+ $rulesList[] = $ruleObj;
+ }
+ return $rulesList;
+ }
+}
+