%PDF- %PDF-
| Direktori : /home/graphicd/public_html/vebto/vendor/kreait/firebase-php/src/Firebase/RemoteConfig/ |
| Current File : /home/graphicd/public_html/vebto/vendor/kreait/firebase-php/src/Firebase/RemoteConfig/Template.php |
<?php
declare(strict_types=1);
namespace Kreait\Firebase\RemoteConfig;
use Kreait\Firebase\Exception\InvalidArgumentException;
use Kreait\Firebase\Util\JSON;
use Psr\Http\Message\ResponseInterface;
class Template implements \JsonSerializable
{
/** @var string */
private $etag = '*';
/** @var Parameter[] */
private $parameters = [];
/** @var ParameterGroup[] */
private $parameterGroups = [];
/** @var Condition[] */
private $conditions = [];
/** @var Version|null */
private $version;
private function __construct()
{
}
public static function new(): self
{
return new self();
}
/**
* @internal
*
* @deprecated 5.10.0
* @codeCoverageIgnore
*/
public static function fromResponse(ResponseInterface $response): self
{
$etagHeader = $response->getHeader('ETag');
$etag = \array_shift($etagHeader) ?: '*';
$data = JSON::decode((string) $response->getBody(), true);
return self::fromArray($data, $etag);
}
/**
* @param array<string, mixed> $data
*/
public static function fromArray(array $data, ?string $etag = null): self
{
$template = new self();
$template->etag = $etag ?? '*';
foreach ((array) ($data['conditions'] ?? []) as $conditionData) {
$template = $template->withCondition(self::buildCondition($conditionData['name'], $conditionData));
}
foreach ((array) ($data['parameters'] ?? []) as $name => $parameterData) {
$template = $template->withParameter(self::buildParameter($name, $parameterData));
}
foreach ((array) ($data['parameterGroups'] ?? []) as $name => $parameterGroupData) {
$template = $template->withParameterGroup(self::buildParameterGroup($name, $parameterGroupData));
}
if (\is_array($data['version'] ?? null)) {
$template->version = Version::fromArray($data['version']);
}
return $template;
}
/**
* @param array<string, string> $data
*/
private static function buildCondition(string $name, array $data): Condition
{
$condition = Condition::named($name)->withExpression($data['expression']);
if ($tagColor = $data['tagColor'] ?? null) {
$condition = $condition->withTagColor(new TagColor($tagColor));
}
return $condition;
}
/**
* @param array<string, mixed> $data
*/
private static function buildParameter(string $name, array $data): Parameter
{
$parameter = Parameter::named($name)
->withDescription((string) ($data['description'] ?? ''))
->withDefaultValue(DefaultValue::fromArray($data['defaultValue'] ?? []));
foreach ((array) ($data['conditionalValues'] ?? []) as $key => $conditionalValueData) {
$parameter = $parameter->withConditionalValue(new ConditionalValue($key, $conditionalValueData['value']));
}
return $parameter;
}
/**
* @param array<string, mixed> $parameterGroupData
*/
private static function buildParameterGroup(string $name, array $parameterGroupData): ParameterGroup
{
$group = ParameterGroup::named($name)
->withDescription((string) ($parameterGroupData['description'] ?? ''));
foreach ($parameterGroupData['parameters'] ?? [] as $parameterName => $parameterData) {
$group = $group->withParameter(self::buildParameter($parameterName, $parameterData));
}
return $group;
}
/**
* @internal
*/
public function etag(): string
{
return $this->etag;
}
/**
* @return Condition[]
*/
public function conditions(): array
{
return $this->conditions;
}
/**
* @return Parameter[]
*/
public function parameters(): array
{
return $this->parameters;
}
/**
* @return ParameterGroup[]
*/
public function parameterGroups(): array
{
return $this->parameterGroups;
}
public function version(): ?Version
{
return $this->version;
}
public function withParameter(Parameter $parameter): Template
{
$this->assertThatAllConditionalValuesAreValid($parameter);
$template = clone $this;
$template->parameters[$parameter->name()] = $parameter;
return $template;
}
public function withParameterGroup(ParameterGroup $parameterGroup): Template
{
$template = clone $this;
$template->parameterGroups[$parameterGroup->name()] = $parameterGroup;
return $template;
}
public function withCondition(Condition $condition): Template
{
$template = clone $this;
$template->conditions[$condition->name()] = $condition;
return $template;
}
private function assertThatAllConditionalValuesAreValid(Parameter $parameter): void
{
foreach ($parameter->conditionalValues() as $conditionalValue) {
if (!\array_key_exists($conditionalValue->conditionName(), $this->conditions)) {
$message = 'The conditional value of the parameter named "%s" refers to a condition "%s" which does not exist.';
throw new InvalidArgumentException(\sprintf($message, $parameter->name(), $conditionalValue->conditionName()));
}
}
}
/**
* @return array<string, mixed>
*/
public function jsonSerialize(): array
{
return [
'conditions' => !empty($this->conditions) ? \array_values($this->conditions) : null,
'parameters' => !empty($this->parameters) ? $this->parameters : null,
'parameterGroups' => !empty($this->parameterGroups) ? $this->parameterGroups : null,
];
}
}