diff --git a/src/FeatureAccess/FeatureAccessContainer.php b/src/FeatureAccess/FeatureAccessContainer.php index 4f27264..d429a6d 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, \Countable { 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) { @@ -58,8 +58,33 @@ public function has(string $featureAccessName): bool return isset($this->accesses[$featureAccessName]); } - public function getAll(): array + public function current() { - return $this->accesses; + return current($this->accesses); + } + + public function next() + { + return next($this->accesses); + } + + public function key() + { + return key($this->accesses); + } + + public function valid(): bool + { + return $this->key() !== null; + } + + public function rewind() + { + return reset($this->accesses); + } + + public function count() + { + return count($this->accesses); } } 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/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/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); } } 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); } } 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); } }