From 31591318e48d1796c8d1bdb93f35b6d6aa40e876 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gamez?= Date: Mon, 5 Aug 2019 10:55:54 +0200 Subject: [PATCH] Self-validate topic subscription collection --- src/Firebase/Messaging/AppInstance.php | 8 +++-- src/Firebase/Messaging/TopicSubscriptions.php | 36 +++++-------------- 2 files changed, 14 insertions(+), 30 deletions(-) diff --git a/src/Firebase/Messaging/AppInstance.php b/src/Firebase/Messaging/AppInstance.php index 91ce9471..1d0ae7ff 100644 --- a/src/Firebase/Messaging/AppInstance.php +++ b/src/Firebase/Messaging/AppInstance.php @@ -36,14 +36,16 @@ public static function fromRawData(RegistrationToken $registrationToken, array $ $info->registrationToken = $registrationToken; $info->rawData = $rawData; + $subscriptions = []; + foreach ($rawData['rel']['topics'] ?? [] as $topicName => $subscriptionInfo) { $topic = Topic::fromValue($topicName); $addedAt = DT::toUTCDateTimeImmutable($subscriptionInfo['addDate'] ?? null); - $subscription = new TopicSubscription($topic, $registrationToken, $addedAt); - - $info->topicSubscriptions->add($subscription); + $subscriptions[] = new TopicSubscription($topic, $registrationToken, $addedAt); } + $info->topicSubscriptions = new TopicSubscriptions(...$subscriptions); + return $info; } diff --git a/src/Firebase/Messaging/TopicSubscriptions.php b/src/Firebase/Messaging/TopicSubscriptions.php index fe890cbb..ba8bcca5 100644 --- a/src/Firebase/Messaging/TopicSubscriptions.php +++ b/src/Firebase/Messaging/TopicSubscriptions.php @@ -4,51 +4,33 @@ namespace Kreait\Firebase\Messaging; -use ArrayIterator; use Countable; +use Generator; use IteratorAggregate; final class TopicSubscriptions implements Countable, IteratorAggregate { /** @var TopicSubscription[] */ - private $subscriptions = []; + private $subscriptions; - /** - * @param TopicSubscription[] $subscriptions - */ - public function __construct(array $subscriptions = []) - { - foreach ($subscriptions as $subscription) { - if ($subscription instanceof TopicSubscription) { - $this->add($subscription); - } - } - } - - public function add(TopicSubscription $subscription) + public function __construct(TopicSubscription ...$subscriptions) { - $this->subscriptions[$subscription->topic()->value()] = $subscription; + $this->subscriptions = $subscriptions; } public function filter(callable $filter): self { - return new self(\array_filter($this->subscriptions, $filter)); - } - - /** - * @return TopicSubscription[] - */ - public function toArray(): array - { - return $this->subscriptions; + return new self(...\array_filter($this->subscriptions, $filter)); } /** - * @return ArrayIterator|TopicSubscription[] + * @codeCoverageIgnore + * + * @return Generator|TopicSubscription[] */ public function getIterator() { - return new ArrayIterator($this->subscriptions); + yield from $this->subscriptions; } public function count()