From b2bd946cd3e573b4f33826d6c7171e6f95114c3c Mon Sep 17 00:00:00 2001 From: Fabio Montefuscolo Date: Tue, 15 May 2018 15:39:28 -0300 Subject: [PATCH] Rename classes --- composer.json | 4 +- ...impleHooksManager.php => BaseMediator.php} | 63 ++++++++++++++----- ...ksManagerTest.php => BaseMediatorTest.php} | 20 +++--- 3 files changed, 58 insertions(+), 29 deletions(-) rename src/{SimpleHooksManager.php => BaseMediator.php} (75%) rename tests/{SimpleHooksManagerTest.php => BaseMediatorTest.php} (86%) diff --git a/composer.json b/composer.json index 4d6ce18..940919e 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,5 @@ { - "name": "tikiorg/simple-hooks-manager", + "name": "montefuscolo/php-hooks", "description": "A class to provide hooks as actions and filters", "type": "library", "require-dev": { @@ -16,7 +16,7 @@ "scripts": { "test": [ "find src -name '*.php' -exec php -l {} \\;", - "./vendor/bin/phpunit --bootstrap vendor/autoload.php tests/SimpleHooksManagerTest" + "./vendor/bin/phpunit --bootstrap vendor/autoload.php tests/BaseMediatorTest" ] }, "autoload": { diff --git a/src/SimpleHooksManager.php b/src/BaseMediator.php similarity index 75% rename from src/SimpleHooksManager.php rename to src/BaseMediator.php index 8c8d46c..fffe868 100644 --- a/src/SimpleHooksManager.php +++ b/src/BaseMediator.php @@ -1,23 +1,17 @@ filters = array(); $this->actions = array(); } - public static function getInstance() { - if (self::$instance === null) { - self::$instance = new self(); - } - return self::$instance; - } - private function add(&$chain, $name, $callback, $priority) { if (empty($chain[ $name ])) { $chain[ $name ] = array(); @@ -25,14 +19,6 @@ private function add(&$chain, $name, $callback, $priority) { $chain[ $name ][ ] = array($callback, $priority); } - public function add_filter($name, $callback, $priority=10) { - $this->add($this->filters, $name, $callback, $priority); - } - - public function add_action($name, $callback, $priority=10) { - $this->add($this->actions, $name, $callback, $priority); - } - private function remove(&$chain, $name, $func) { if (empty($chain[ $name ])) { return; @@ -49,6 +35,49 @@ private function remove(&$chain, $name, $func) { } } + private function run(&$chain, $name, $subject=null) { + if (empty($chain[ $name ])) { + return $subject; + } + + $filtering = $this->filters === $chain; + $subject = array_slice(func_get_args(), 2); + + usort($chain[ $name ], function($a, $b) { + return $a[1] === $b[1] ? 0 : ( $a[1] < $b[1] ? -1 : 1 ); + }); + + foreach ($chain[ $name ] as $function) { + list($callback, $priority) = $function; + $result = call_user_func_array($callback, $subject); + + if ($filtering) { + $subject = array($result); + } + } + + return $subject; + } + + private function get_hook_name($name) { + return $this->prefix . $name; + } + + public static function getInstance() { + if (self::$instance === null) { + self::$instance = new self(); + } + return self::$instance; + } + + public function add_filter($name, $callback, $priority=10) { + $this->add($this->filters, $name, $callback, $priority); + } + + public function add_action($name, $callback, $priority=10) { + $this->add($this->actions, $name, $callback, $priority); + } + public function remove_filter($name, $func=null) { return $this->remove($this->filters, $name, $func); } diff --git a/tests/SimpleHooksManagerTest.php b/tests/BaseMediatorTest.php similarity index 86% rename from tests/SimpleHooksManagerTest.php rename to tests/BaseMediatorTest.php index 1842c2b..6a7c31e 100644 --- a/tests/SimpleHooksManagerTest.php +++ b/tests/BaseMediatorTest.php @@ -1,14 +1,14 @@ assertSame($instance1, $instance2); $this->assertEquals($instance1, $instance2); @@ -17,7 +17,7 @@ public function testUniqueInstance() { public function testAddAction() { $self = $this; - $hooks = SimpleHooksManager::getInstance(); + $hooks = BaseMediator::getInstance(); $hooks->add_action('test_add_action', function() use ($self) { $self->assertTrue(true); }); @@ -28,7 +28,7 @@ public function testAddAction() { public function testAddActionWithParameters() { $self = $this; - $hooks = SimpleHooksManager::getInstance(); + $hooks = BaseMediator::getInstance(); $hooks->add_action('test_addaction_with_parameters', function($subject) use ($self) { $self->assertEquals('the-parameter', $subject); }); @@ -38,7 +38,7 @@ public function testAddActionWithParameters() { public function testAddActionPriority() { - $hooks = SimpleHooksManager::getInstance(); + $hooks = BaseMediator::getInstance(); $state = (object) array('name' => ''); $hooks->add_action('test_add_action_priority', function($subject) { @@ -58,7 +58,7 @@ public function testAddActionPriority() { } public function testRemoveAction() { - $hooks = SimpleHooksManager::getInstance(); + $hooks = BaseMediator::getInstance(); $callback1 = function($subject) { $subject->name .= 'callback1'; }; $hooks->add_action('test_remove_action', $callback1, 10); @@ -77,7 +77,7 @@ public function testRemoveAction() { } public function testEmptyAction() { - $hooks = SimpleHooksManager::getInstance(); + $hooks = BaseMediator::getInstance(); $callback1 = function($subject) { $subject->name .= 'callback1'; }; $hooks->add_action('test_empty_action', $callback1, 10); @@ -92,7 +92,7 @@ public function testEmptyAction() { } public function testAddFilter() { - $hooks = SimpleHooksManager::getInstance(); + $hooks = BaseMediator::getInstance(); $hooks->add_filter('test_add_filter', function($subject){ return $subject * 2;