From 8d91e8cfa66e96f07a49554510959a7e6a1bf9b4 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Sun, 3 Jul 2016 21:14:08 +0200 Subject: [PATCH 1/4] Prepend and append should handle FQN and not objects --- src/ClassDiscovery.php | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/ClassDiscovery.php b/src/ClassDiscovery.php index cb6ecda..23158ce 100644 --- a/src/ClassDiscovery.php +++ b/src/ClassDiscovery.php @@ -4,7 +4,6 @@ use Http\Discovery\Exception\DiscoveryFailedException; use Http\Discovery\Exception\StrategyUnavailableException; -use Http\Discovery\Strategy\DiscoveryStrategy; /** * Registry that based find results on class existence. @@ -109,7 +108,7 @@ private static function storeInCache($type, $class) /** * Set new strategies and clear the cache. * - * @param DiscoveryStrategy[] $strategies + * @param array $strategies string array of FQN to a DiscoveryStrategy */ public static function setStrategies(array $strategies) { @@ -120,9 +119,9 @@ public static function setStrategies(array $strategies) /** * Append a strategy at the end of the strategy queue. * - * @param DiscoveryStrategy $strategy + * @param string $strategy FQN to a DiscoveryStrategy */ - public static function appendStrategy(DiscoveryStrategy $strategy) + public static function appendStrategy($strategy) { self::$strategies[] = $strategy; self::clearCache(); @@ -131,9 +130,9 @@ public static function appendStrategy(DiscoveryStrategy $strategy) /** * Prepend a strategy at the beginning of the strategy queue. * - * @param DiscoveryStrategy $strategy + * @param string $strategy FQN to a DiscoveryStrategy */ - public static function prependStrategy(DiscoveryStrategy $strategy) + public static function prependStrategy($strategy) { self::$strategies = array_unshift(self::$strategies, $strategy); self::clearCache(); From 1137e5926968405574f669665e55b1f8cdbb1a4c Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Sun, 3 Jul 2016 21:32:49 +0200 Subject: [PATCH 2/4] Bugfixes --- src/ClassDiscovery.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/ClassDiscovery.php b/src/ClassDiscovery.php index 23158ce..d27b27a 100644 --- a/src/ClassDiscovery.php +++ b/src/ClassDiscovery.php @@ -87,8 +87,10 @@ private static function getFromCache($type) } $candidate = self::$cache[$type]; - if (!self::evaluateCondition($candidate['condition'])) { - return; + if (isset($candidate['condition'])) { + if (!self::evaluateCondition($candidate['condition'])) { + return; + } } return $candidate['class']; @@ -134,7 +136,7 @@ public static function appendStrategy($strategy) */ public static function prependStrategy($strategy) { - self::$strategies = array_unshift(self::$strategies, $strategy); + array_unshift(self::$strategies, $strategy); self::clearCache(); } From 1cd4ab9dbbc675d35b1be3e2b77a393ff1c2ba52 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Mon, 4 Jul 2016 09:24:55 +0200 Subject: [PATCH 3/4] typo --- src/ClassDiscovery.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ClassDiscovery.php b/src/ClassDiscovery.php index d27b27a..855145f 100644 --- a/src/ClassDiscovery.php +++ b/src/ClassDiscovery.php @@ -110,7 +110,7 @@ private static function storeInCache($type, $class) /** * Set new strategies and clear the cache. * - * @param array $strategies string array of FQN to a DiscoveryStrategy + * @param array $strategies string array of fully qualified class name to a DiscoveryStrategy */ public static function setStrategies(array $strategies) { @@ -121,7 +121,7 @@ public static function setStrategies(array $strategies) /** * Append a strategy at the end of the strategy queue. * - * @param string $strategy FQN to a DiscoveryStrategy + * @param string $strategy Fully qualified class name to a DiscoveryStrategy */ public static function appendStrategy($strategy) { @@ -132,7 +132,7 @@ public static function appendStrategy($strategy) /** * Prepend a strategy at the beginning of the strategy queue. * - * @param string $strategy FQN to a DiscoveryStrategy + * @param string $strategy Fully qualified class name to a DiscoveryStrategy */ public static function prependStrategy($strategy) { From 2ba86a53fba16592af189386ccee23942979fc2e Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Tue, 5 Jul 2016 09:05:26 +0200 Subject: [PATCH 4/4] Added tests --- spec/ClassDiscoverySpec.php | 35 ++++++++++++++++++-- spec/Helper/FailedDiscoveryStrategy.php | 21 ++++++++++++ spec/Helper/SuccessfullDiscoveryStrategy.php | 21 ++++++++++++ 3 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 spec/Helper/FailedDiscoveryStrategy.php create mode 100644 spec/Helper/SuccessfullDiscoveryStrategy.php diff --git a/spec/ClassDiscoverySpec.php b/spec/ClassDiscoverySpec.php index 630a284..b276fe4 100644 --- a/spec/ClassDiscoverySpec.php +++ b/spec/ClassDiscoverySpec.php @@ -12,6 +12,8 @@ use Puli\Repository\Api\ResourceRepository; use PhpSpec\ObjectBehavior; use spec\Http\Discovery\Helper\DiscoveryHelper; +use spec\Http\Discovery\Helper\FailedDiscoveryStrategy; +use spec\Http\Discovery\Helper\SuccessfullDiscoveryStrategy; class ClassDiscoverySpec extends ObjectBehavior { @@ -33,7 +35,7 @@ function it_throws_an_exception_when_no_candidate_found(DiscoveryStrategy $strat $this->shouldThrow(DiscoveryFailedException::class)->duringFind('NoCandidate'); } - function it_returns_a_class(DiscoveryStrategy $strategy) + function it_returns_a_class() { $candidate = ['class' => 'ClassName', 'condition' => true]; DiscoveryHelper::setClasses('Foobar', [$candidate]); @@ -41,7 +43,7 @@ function it_returns_a_class(DiscoveryStrategy $strategy) $this->find('Foobar')->shouldReturn('ClassName'); } - function it_validates_conditions(DiscoveryStrategy $strategy) { + function it_validates_conditions() { $c0 = ['class' => 'ClassName0', 'condition' => false]; $c1 = ['class' => 'ClassName1', 'condition' => true]; $c2 = ['class' => 'ClassName2', 'condition' => false]; @@ -49,8 +51,37 @@ function it_validates_conditions(DiscoveryStrategy $strategy) { $this->find('Foobar')->shouldReturn('ClassName1'); } + + function it_prepends_strategies() { + $candidate = ['class' => 'Added']; + DiscoveryHelper::setClasses('Foobar', [$candidate]); + + ClassDiscovery::setStrategies([SuccessfullDiscoveryStrategy::class]); + ClassDiscovery::prependStrategy(DiscoveryHelper::class); + + $this->find('Foobar')->shouldReturn('Added'); + } + + function it_appends_strategies() { + $candidate = ['class' => 'Added']; + DiscoveryHelper::setClasses('Foobar', [$candidate]); + + // Make sure our strategy is added to the list + ClassDiscovery::setStrategies([FailedDiscoveryStrategy::class]); + ClassDiscovery::appendStrategy(DiscoveryHelper::class); + + $this->find('Foobar')->shouldReturn('Added'); + + // Make sure it is added last in the list + ClassDiscovery::setStrategies([SuccessfullDiscoveryStrategy::class]); + ClassDiscovery::appendStrategy(DiscoveryHelper::class); + + $this->find('Foobar')->shouldReturn('Success'); + } } + + class ClassDiscoveryStub extends ClassDiscovery { public static function find($type) diff --git a/spec/Helper/FailedDiscoveryStrategy.php b/spec/Helper/FailedDiscoveryStrategy.php new file mode 100644 index 0000000..a6e4955 --- /dev/null +++ b/spec/Helper/FailedDiscoveryStrategy.php @@ -0,0 +1,21 @@ + + */ +class FailedDiscoveryStrategy implements DiscoveryStrategy +{ + /** + * {@inheritdoc} + */ + public static function getCandidates($type) + { + return []; + } +} diff --git a/spec/Helper/SuccessfullDiscoveryStrategy.php b/spec/Helper/SuccessfullDiscoveryStrategy.php new file mode 100644 index 0000000..db1a3b9 --- /dev/null +++ b/spec/Helper/SuccessfullDiscoveryStrategy.php @@ -0,0 +1,21 @@ + + */ +class SuccessfullDiscoveryStrategy implements DiscoveryStrategy +{ + /** + * {@inheritdoc} + */ + public static function getCandidates($type) + { + return [['class'=>'Success']]; + } +}