diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 21d57da..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "tools/phptools"] - path = tools/phptools - url = git://github.com/ralphschindler/PHPTools.git diff --git a/composer.json b/composer.json index 031756c..fbc12d7 100644 --- a/composer.json +++ b/composer.json @@ -1,28 +1,29 @@ { - "name": "zendframework/zend-event-manager", - "description": "Zend\\EventManager component", + "name": "zendframework/zend-eventmanager", + "description": " ", "license": "BSD-3-Clause", "keywords": [ "zf2", - "event-manager" + "eventmanager" ], "autoload": { "psr-4": { - "Zend\\EventManager\\": "src/" + "Zend\\EventManager": "src/" } }, "require": { - "php": ">=5.3.23" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "satooshi/php-coveralls": "dev-master", - "phpunit/PHPUnit": "~4.0" + "php": ">=5.3.3", + "zendframework/zend-stdlib": "self.version" }, "homepage": "https://github.com/zendframework/zend-event-manager", "autoload-dev": { "psr-4": { "ZendTest\\EventManager\\": "test/" } + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "satooshi/php-coveralls": "dev-master", + "phpunit/PHPUnit": "~4.0" } } \ No newline at end of file diff --git a/src/Event.php b/src/Event.php index 73a2785..35878b5 100644 --- a/src/Event.php +++ b/src/Event.php @@ -1,21 +1,11 @@ sharedManager = $sharedEventManager; + StaticEventManager::setInstance($sharedEventManager); return $this; } /** * Remove any shared event manager currently attached - * + * * @return void */ public function unsetSharedManager() @@ -113,13 +102,28 @@ public function unsetSharedManager() /** * Get shared event manager * + * If one is not defined, but we have a static instance in + * StaticEventManager, that one will be used and set in this instance. + * + * If none is available in the StaticEventManager, a boolean false is + * returned. + * * @return false|SharedEventManagerInterface */ public function getSharedManager() { - if (null === $this->sharedManager) { - $this->setSharedManager(StaticEventManager::getInstance()); + // "false" means "I do not want a shared manager; don't try and fetch one" + if (false === $this->sharedManager + || $this->sharedManager instanceof SharedEventManagerInterface + ) { + return $this->sharedManager; + } + + if (!StaticEventManager::hasInstance()) { + return false; } + + $this->sharedManager = StaticEventManager::getInstance(); return $this->sharedManager; } @@ -160,7 +164,7 @@ public function addIdentifiers($identifiers) if (is_array($identifiers) || $identifiers instanceof \Traversable) { $this->identifiers = array_unique($this->identifiers + (array) $identifiers); } elseif ($identifiers !== null) { - $this->identifiers = array_unique($this->identifiers + array($identifiers)); + $this->identifiers = array_unique(array_merge($this->identifiers, array($identifiers))); } return $this; } @@ -258,7 +262,7 @@ public function triggerUntil($event, $target, $argv = null, $callback = null) * executed. By default, this value is 1; however, you may set it for any * integer value. Higher values have higher priority (i.e., execute first). * - * You can specify "*" for the event name. In such cases, the listener will + * You can specify "*" for the event name. In such cases, the listener will * be triggered for every event. * * @param string|array|ListenerAggregateInterface $event An event or array of event names. If a ListenerAggregateInterface, proxies to {@link attachAggregate()}. @@ -521,9 +525,9 @@ protected function getSharedListeners($event) * Add listeners to the master queue of listeners * * Used to inject shared listeners and wildcard listeners. - * - * @param PriorityQueue $masterListeners - * @param PriorityQueue $listeners + * + * @param PriorityQueue $masterListeners + * @param PriorityQueue $listeners * @return void */ protected function insertListeners($masterListeners, $listeners) diff --git a/src/EventManagerAwareInterface.php b/src/EventManagerAwareInterface.php index e3aff75..c01c79b 100644 --- a/src/EventManagerAwareInterface.php +++ b/src/EventManagerAwareInterface.php @@ -1,22 +1,11 @@ events instanceof EventManagerInterface) { $this->setEventManager(new EventManager()); diff --git a/src/ResponseCollection.php b/src/ResponseCollection.php index 5fede80..546b18a 100644 --- a/src/ResponseCollection.php +++ b/src/ResponseCollection.php @@ -1,21 +1,11 @@ - * SharedEventManager::getInstance()->connect( + * $sharedEventManager = new SharedEventManager(); + * $sharedEventManager->attach( * array('My\Resource\AbstractResource', 'My\Resource\EntityResource'), * 'getAll', * function ($e) use ($cache) { @@ -65,9 +54,9 @@ class SharedEventManager implements SharedEventManagerInterface * } * ); * - * + * * @param string|array $id Identifier(s) for event emitting component(s) - * @param string $event + * @param string $event * @param callback $callback PHP Callback * @param int $priority Priority at which listener should execute * @return void @@ -85,9 +74,9 @@ public function attach($id, $event, $callback, $priority = 1) /** * Detach a listener from an event offered by a given resource - * + * * @param string|int $id - * @param CallbackHandler $listener + * @param CallbackHandler $listener * @return bool Returns true if event and listener found, and unsubscribed; returns false if either event or listener not found */ public function detach($id, CallbackHandler $listener) @@ -100,7 +89,7 @@ public function detach($id, CallbackHandler $listener) /** * Retrieve all registered events for a given resource - * + * * @param string|int $id * @return array */ @@ -114,9 +103,9 @@ public function getEvents($id) /** * Retrieve all listeners for a given identifier and event - * + * * @param string|int $id - * @param string|int $event + * @param string|int $event * @return false|PriorityQueue */ public function getListeners($id, $event) @@ -129,9 +118,9 @@ public function getListeners($id, $event) /** * Clear all listeners for a given identifier, optionally for a specific event - * - * @param string|int $id - * @param null|string $event + * + * @param string|int $id + * @param null|string $event * @return bool */ public function clearListeners($id, $event = null) diff --git a/src/SharedEventManagerAwareInterface.php b/src/SharedEventManagerAwareInterface.php index dbe2853..bdc7cef 100644 --- a/src/SharedEventManagerAwareInterface.php +++ b/src/SharedEventManagerAwareInterface.php @@ -1,22 +1,11 @@ message); } $this->events = new EventManager; + StaticEventManager::resetInstance(); + } + + public function tearDown() + { + StaticEventManager::resetInstance(); } public function testAttachShouldReturnCallbackHandler() @@ -563,6 +557,18 @@ public function testDuplicateIdentifiersAreNotRegistered() $this->assertSame($identifiers[0], __CLASS__); } + public function testIdentifierGetterSettersWorkWithStrings() + { + $identifier1 = 'foo'; + $identifiers = array($identifier1); + $this->assertInstanceOf('Zend\EventManager\EventManager', $this->events->setIdentifiers($identifier1)); + $this->assertSame($this->events->getIdentifiers(), $identifiers); + $identifier2 = 'baz'; + $identifiers = array($identifier1, $identifier2); + $this->assertInstanceOf('Zend\EventManager\EventManager', $this->events->addIdentifiers($identifier2)); + $this->assertSame($this->events->getIdentifiers(), $identifiers); + } + public function testIdentifierGetterSettersWorkWithArrays() { $identifiers = array('foo', 'bar'); @@ -597,4 +603,18 @@ public function testListenersAttachedWithWildcardAreTriggeredForAllEvents() $this->assertContains($event, $test->events); } } + + public function testSettingSharedEventManagerSetsStaticEventManagerInstance() + { + $shared = new SharedEventManager(); + $this->events->setSharedManager($shared); + $this->assertSame($shared, $this->events->getSharedManager()); + $this->assertSame($shared, StaticEventManager::getInstance()); + } + + public function testDoesNotCreateStaticInstanceIfNonePresent() + { + StaticEventManager::resetInstance(); + $this->assertFalse($this->events->getSharedManager()); + } } diff --git a/test/FilterChainTest.php b/test/FilterChainTest.php index 1e0913a..353b02e 100644 --- a/test/FilterChainTest.php +++ b/test/FilterChainTest.php @@ -1,36 +1,23 @@ 0); $events = StaticEventManager::getInstance(); $events->attach( - 'ZendTest\EventManager\TestAsset\ClassWithEvents', - 'foo', + 'ZendTest\EventManager\TestAsset\ClassWithEvents', + 'foo', function ($e) use ($counter) { $counter->count++; } ); $class = new TestAsset\ClassWithEvents(); - $class->events()->setSharedManager($events); + $class->getEventManager()->setSharedManager($events); $class->foo(); $this->assertEquals(1, $counter->count); } @@ -62,17 +49,17 @@ public function testLocalHandlersAreExecutedPriorToStaticHandlersWhenSetWithSame $test = (object) array('results' => array()); $events = StaticEventManager::getInstance(); $events->attach( - 'ZendTest\EventManager\TestAsset\ClassWithEvents', - 'foo', + 'ZendTest\EventManager\TestAsset\ClassWithEvents', + 'foo', function ($e) use ($test) { $test->results[] = 'static'; } ); $class = new TestAsset\ClassWithEvents(); - $class->events()->attach('foo', function ($e) use ($test) { + $class->getEventManager()->attach('foo', function ($e) use ($test) { $test->results[] = 'local'; }); - $class->events()->setSharedManager($events); + $class->getEventManager()->setSharedManager($events); $class->foo(); $this->assertEquals(array('local', 'static'), $test->results); } @@ -82,24 +69,24 @@ public function testLocalHandlersAreExecutedInPriorityOrderRegardlessOfStaticOrL $test = (object) array('results' => array()); $events = StaticEventManager::getInstance(); $events->attach( - 'ZendTest\EventManager\TestAsset\ClassWithEvents', - 'foo', + 'ZendTest\EventManager\TestAsset\ClassWithEvents', + 'foo', function ($e) use ($test) { $test->results[] = 'static'; }, 10000 // high priority ); $class = new TestAsset\ClassWithEvents(); - $class->events()->attach('foo', function ($e) use ($test) { + $class->getEventManager()->attach('foo', function ($e) use ($test) { $test->results[] = 'local'; }, 1); // low priority - $class->events()->attach('foo', function ($e) use ($test) { + $class->getEventManager()->attach('foo', function ($e) use ($test) { $test->results[] = 'local2'; }, 1000); // medium priority - $class->events()->attach('foo', function ($e) use ($test) { + $class->getEventManager()->attach('foo', function ($e) use ($test) { $test->results[] = 'local3'; }, 15000); // highest priority - $class->events()->setSharedManager($events); + $class->getEventManager()->setSharedManager($events); $class->foo(); $this->assertEquals(array('local3', 'static', 'local2', 'local'), $test->results); } @@ -108,14 +95,14 @@ public function testCallingUnsetSharedManagerDisablesStaticManager() { $counter = (object) array('count' => 0); StaticEventManager::getInstance()->attach( - 'ZendTest\EventManager\TestAsset\ClassWithEvents', - 'foo', + 'ZendTest\EventManager\TestAsset\ClassWithEvents', + 'foo', function ($e) use ($counter) { $counter->count++; } ); $class = new TestAsset\ClassWithEvents(); - $class->events()->unsetSharedManager(); + $class->getEventManager()->unsetSharedManager(); $class->foo(); $this->assertEquals(0, $counter->count); } @@ -124,16 +111,16 @@ public function testCanPassAlternateStaticConnectionsHolder() { $counter = (object) array('count' => 0); StaticEventManager::getInstance()->attach( - 'ZendTest\EventManager\TestAsset\ClassWithEvents', - 'foo', + 'ZendTest\EventManager\TestAsset\ClassWithEvents', + 'foo', function ($e) use ($counter) { $counter->count++; } ); $mockStaticEvents = new TestAsset\StaticEventsMock(); $class = new TestAsset\ClassWithEvents(); - $class->events()->setSharedManager($mockStaticEvents); - $this->assertSame($mockStaticEvents, $class->events()->getSharedManager()); + $class->getEventManager()->setSharedManager($mockStaticEvents); + $this->assertSame($mockStaticEvents, $class->getEventManager()->getSharedManager()); $class->foo(); $this->assertEquals(0, $counter->count); } @@ -143,18 +130,18 @@ public function testTriggerMergesPrioritiesOfStaticAndInstanceListeners() $test = (object) array('results' => array()); $events = StaticEventManager::getInstance(); $events->attach( - 'ZendTest\EventManager\TestAsset\ClassWithEvents', - 'foo', + 'ZendTest\EventManager\TestAsset\ClassWithEvents', + 'foo', function ($e) use ($test) { $test->results[] = 'static'; }, 100 ); $class = new TestAsset\ClassWithEvents(); - $class->events()->attach('foo', function ($e) use ($test) { + $class->getEventManager()->attach('foo', function ($e) use ($test) { $test->results[] = 'local'; }, -100); - $class->events()->setSharedManager($events); + $class->getEventManager()->setSharedManager($events); $class->foo(); $this->assertEquals(array('static', 'local'), $test->results); } diff --git a/test/TestAsset/ClassWithEvents.php b/test/TestAsset/ClassWithEvents.php index 1a33906..c2953fa 100644 --- a/test/TestAsset/ClassWithEvents.php +++ b/test/TestAsset/ClassWithEvents.php @@ -1,42 +1,29 @@ events = $events; @@ -49,6 +36,6 @@ public function events(EventManagerInterface $events = null) public function foo() { - $this->events()->trigger(__FUNCTION__, $this, array()); + $this->getEventManager()->trigger(__FUNCTION__, $this, array()); } } diff --git a/test/TestAsset/Functor.php b/test/TestAsset/Functor.php index 494af1b..5b1fed8 100644 --- a/test/TestAsset/Functor.php +++ b/test/TestAsset/Functor.php @@ -1,4 +1,12 @@