123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- <?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;
- }
- }
|