From 80c08a0ab668f5fdf08928ee9633cc76d7c96f14 Mon Sep 17 00:00:00 2001 From: Arnaud Date: Thu, 1 Feb 2018 11:27:42 +0000 Subject: [PATCH 1/5] Make FeatureAccessContainer iterable --- src/FeatureAccess/FeatureAccessContainer.php | 29 ++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/FeatureAccess/FeatureAccessContainer.php b/src/FeatureAccess/FeatureAccessContainer.php index 4f27264..73d894b 100644 --- a/src/FeatureAccess/FeatureAccessContainer.php +++ b/src/FeatureAccess/FeatureAccessContainer.php @@ -3,7 +3,7 @@ namespace FeatureKeys\FeatureAccess; -final class FeatureAccessContainer +final class FeatureAccessContainer implements \Iterator { private $accesses = []; @@ -27,7 +27,7 @@ public function validate(): void public function override(FeatureAccessContainer $container): void { - foreach ($container->getAll() as $access) { + foreach ($container as $access) { try { $this->get($access::getName())->setEnabled($access->isEnabled()); } catch (FeatureAccessContainerException $exception) { @@ -62,4 +62,29 @@ public function getAll(): array { return $this->accesses; } + + public function current() + { + return current($this->accesses); + } + + public function next() + { + return next($this->accesses); + } + + public function key() + { + return key($this->accesses); + } + + public function valid() + { + return $this->key() !== null; + } + + public function rewind() + { + return reset($this->accesses); + } } From 93d7a0e35fb9b89668807ccd8da35fa287ac418c Mon Sep 17 00:00:00 2001 From: Arnaud Date: Thu, 1 Feb 2018 12:05:20 +0000 Subject: [PATCH 2/5] Make FeatureAccessContainer countable --- src/FeatureAccess/FeatureAccessContainer.php | 9 +++++++-- .../FeatureAccess/FeatureAccessContainerFactoryTest.php | 2 +- tests/FeatureAccess/FeatureAccessContainerTest.php | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/FeatureAccess/FeatureAccessContainer.php b/src/FeatureAccess/FeatureAccessContainer.php index 73d894b..0152324 100644 --- a/src/FeatureAccess/FeatureAccessContainer.php +++ b/src/FeatureAccess/FeatureAccessContainer.php @@ -3,7 +3,7 @@ namespace FeatureKeys\FeatureAccess; -final class FeatureAccessContainer implements \Iterator +final class FeatureAccessContainer implements \Iterator, \Countable { private $accesses = []; @@ -78,7 +78,7 @@ public function key() return key($this->accesses); } - public function valid() + public function valid(): bool { return $this->key() !== null; } @@ -87,4 +87,9 @@ public function rewind() { return reset($this->accesses); } + + public function count() + { + return count($this->accesses); + } } diff --git a/tests/FeatureAccess/FeatureAccessContainerFactoryTest.php b/tests/FeatureAccess/FeatureAccessContainerFactoryTest.php index 185bada..675ccbc 100644 --- a/tests/FeatureAccess/FeatureAccessContainerFactoryTest.php +++ b/tests/FeatureAccess/FeatureAccessContainerFactoryTest.php @@ -18,7 +18,7 @@ public function testCanCreateContainerFromConfig(): void self::assertInstanceOf(FeatureAccessContainer::class, $container); self::assertCount( $this->countConfigElements($config), - $container->getAll() + $container ); } diff --git a/tests/FeatureAccess/FeatureAccessContainerTest.php b/tests/FeatureAccess/FeatureAccessContainerTest.php index c01661c..68f7245 100644 --- a/tests/FeatureAccess/FeatureAccessContainerTest.php +++ b/tests/FeatureAccess/FeatureAccessContainerTest.php @@ -100,6 +100,6 @@ public function testCanBeOverridden(): void self::assertTrue($container->get(YodaAccess::getName())->isEnabled()); self::assertTrue($container->get(QuiGonAccess::getName())->isEnabled()); self::assertTrue($container->get(ObiWanAccess::getName())->isDisabled()); - self::assertCount(4, $container->getAll()); + self::assertCount(4, $container); } } From 98f5b784b0cf579bf7f8bf63c2329aa648a58305 Mon Sep 17 00:00:00 2001 From: Arnaud Date: Thu, 1 Feb 2018 12:06:26 +0000 Subject: [PATCH 3/5] Make FeatureValueContainer iterable and countable --- src/FeatureValue/FeatureValueContainer.php | 33 ++++++++++++++++--- .../FeatureValueContainerFactoryTest.php | 2 +- .../FeatureValueContainerTest.php | 2 +- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/FeatureValue/FeatureValueContainer.php b/src/FeatureValue/FeatureValueContainer.php index 18e1fb8..092a4bc 100644 --- a/src/FeatureValue/FeatureValueContainer.php +++ b/src/FeatureValue/FeatureValueContainer.php @@ -3,7 +3,7 @@ namespace FeatureKeys\FeatureValue; -final class FeatureValueContainer +final class FeatureValueContainer implements \Iterator, \Countable { private $values = []; @@ -16,7 +16,7 @@ public function __construct(FeatureValue ...$values) public function override(FeatureValueContainer $container): void { - foreach ($container->getAll() as $value) { + foreach ($container as $value) { try { $this->get($value::getName())->setValue($value->getValue()); } catch (FeatureValueContainerException $exception) { @@ -46,8 +46,33 @@ public function has(string $FeatureValueName): bool return isset($this->values[$FeatureValueName]); } - public function getAll(): array + public function current() { - return $this->values; + return current($this->values); + } + + public function next() + { + return next($this->values); + } + + public function key() + { + return key($this->values); + } + + public function valid(): bool + { + return $this->key() !== null; + } + + public function rewind() + { + return reset($this->values); + } + + public function count() + { + return count($this->values); } } diff --git a/tests/FeatureValue/FeatureValueContainerFactoryTest.php b/tests/FeatureValue/FeatureValueContainerFactoryTest.php index 03c1f5e..9cd16e3 100644 --- a/tests/FeatureValue/FeatureValueContainerFactoryTest.php +++ b/tests/FeatureValue/FeatureValueContainerFactoryTest.php @@ -19,7 +19,7 @@ public function testCanCreateContainerFromConfig(): void self::assertInstanceOf(FeatureValueContainer::class, $container); self::assertCount( $this->countConfigElements($config), - $container->getAll() + $container ); } diff --git a/tests/FeatureValue/FeatureValueContainerTest.php b/tests/FeatureValue/FeatureValueContainerTest.php index 9b7a41e..e657f26 100644 --- a/tests/FeatureValue/FeatureValueContainerTest.php +++ b/tests/FeatureValue/FeatureValueContainerTest.php @@ -76,6 +76,6 @@ public function testCanBeOverridden(): void self::assertSame('red', $container->get(LightSaberColor::getName())->getValue()); self::assertFalse($container->get(DrawnToTheDarkSide::getName())->getValue()); self::assertSame('adept', $container->get(SithTrainingLevel::getName())->getValue()); - self::assertCount(3, $container->getAll()); + self::assertCount(3, $container); } } From 5f3cc6262db1e34c0741ebb51a1aaf7ea8e460c5 Mon Sep 17 00:00:00 2001 From: Arnaud Date: Thu, 1 Feb 2018 14:47:02 +0000 Subject: [PATCH 4/5] Make FeatureOverrideContainer iterable and countable, get rid of serialize --- .../FeatureOverrideContainer.php | 36 +++++++++++++++++-- .../FeatureOverrideContainerHydrator.php | 2 +- .../FeatureOverrideContainerHydratorTest.php | 12 +++---- 3 files changed, 38 insertions(+), 12 deletions(-) diff --git a/src/FeatureOverride/FeatureOverrideContainer.php b/src/FeatureOverride/FeatureOverrideContainer.php index c275558..cc196e1 100644 --- a/src/FeatureOverride/FeatureOverrideContainer.php +++ b/src/FeatureOverride/FeatureOverrideContainer.php @@ -3,7 +3,7 @@ namespace FeatureKeys\FeatureOverride; -final class FeatureOverrideContainer +final class FeatureOverrideContainer implements \Iterator, \Countable { private $overrides = []; @@ -45,8 +45,38 @@ public function has(string $featureOverrideName): bool return false; } - public function serialize(): array + public function current() { - return $this->overrides; + return current($this->overrides); + } + + public function next() + { + return next($this->overrides); + } + + public function key() + { + return key($this->overrides); + } + + public function valid() + { + return $this->key() !== null; + } + + public function rewind() + { + return reset($this->overrides); + } + + public function end() + { + return end($this->overrides); + } + + public function count() + { + return count($this->overrides); } } diff --git a/src/FeatureOverride/FeatureOverrideContainerHydrator.php b/src/FeatureOverride/FeatureOverrideContainerHydrator.php index 0f9f852..f853fe2 100644 --- a/src/FeatureOverride/FeatureOverrideContainerHydrator.php +++ b/src/FeatureOverride/FeatureOverrideContainerHydrator.php @@ -8,7 +8,7 @@ final class FeatureOverrideContainerHydrator public static function unsetAfter(FeatureOverrideContainer $container, string $lastOverrideName): FeatureOverrideContainer { $hydratedContainer = new FeatureOverrideContainer(...[]); - foreach ($container->serialize() as $override) { + foreach ($container as $override) { $hydratedContainer->set($override); if ($override::getName() === $lastOverrideName) { return $hydratedContainer; diff --git a/tests/FeatureOverride/FeatureOverrideContainerHydratorTest.php b/tests/FeatureOverride/FeatureOverrideContainerHydratorTest.php index d2f881b..7e0e6c0 100644 --- a/tests/FeatureOverride/FeatureOverrideContainerHydratorTest.php +++ b/tests/FeatureOverride/FeatureOverrideContainerHydratorTest.php @@ -32,19 +32,15 @@ public function setUp(): void public function testCanUnsetAfterFirstElement(): void { - $serializedContainer = $this->container->serialize(); - $firstElement = reset($serializedContainer); + $firstElement = $this->container->rewind(); $hydratedContainer = FeatureOverrideContainerHydrator::unsetAfter($this->container, $firstElement::getName()); - $serializedHydratedContainer = $hydratedContainer->serialize(); - self::assertCount(1, $serializedHydratedContainer); + self::assertCount(1, $hydratedContainer); } public function testCanUnsetAfterLastElement(): void { - $serializedContainer = $this->container->serialize(); - $lastElement = end($serializedContainer); + $lastElement = $this->container->end(); $hydratedContainer = FeatureOverrideContainerHydrator::unsetAfter($this->container, $lastElement::getName()); - $serializedHydratedContainer = $hydratedContainer->serialize(); - self::assertCount(count($serializedContainer), $serializedHydratedContainer); + self::assertCount(count($this->container), $hydratedContainer); } } From f0f5dce85408e0a04f448cb88b00517cc313a0f5 Mon Sep 17 00:00:00 2001 From: Arnaud Date: Thu, 1 Feb 2018 14:48:58 +0000 Subject: [PATCH 5/5] remove getall() from container --- src/FeatureAccess/FeatureAccessContainer.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/FeatureAccess/FeatureAccessContainer.php b/src/FeatureAccess/FeatureAccessContainer.php index 0152324..d429a6d 100644 --- a/src/FeatureAccess/FeatureAccessContainer.php +++ b/src/FeatureAccess/FeatureAccessContainer.php @@ -58,11 +58,6 @@ public function has(string $featureAccessName): bool return isset($this->accesses[$featureAccessName]); } - public function getAll(): array - { - return $this->accesses; - } - public function current() { return current($this->accesses);