Source of file EventTrait.php

Size: 1,827 Bytes - Last Modified: 2021-01-12T22:04:13+00:00

C:/Users/MAKS/Code/_PROJECTS/amqp-agent/src/Helper/EventTrait.php

123456789101112131415161718192021222324252627282930313233343536
Covered by 12 test(s):
  • MAKS\AmqpAgent\Tests\Helper\EventTest::testEventDispatchAndListenMethods
  • MAKS\AmqpAgent\Tests\RPC\AbstractEndpointTest::testPingConnectMethodReturnsSelf
  • MAKS\AmqpAgent\Tests\RPC\AbstractEndpointTest::testPingConnectMethodRaisesAnExceptionIfAConnectionIsOpenAlready
  • MAKS\AmqpAgent\Tests\RPC\AbstractEndpointTest::testGetConnectionMethodReturnsAMQPStreamConnection
  • MAKS\AmqpAgent\Tests\RPC\AbstractEndpointTest::testPingMethodWhenTheEndpointIsConnected
  • MAKS\AmqpAgent\Tests\RPC\AbstractEndpointTest::testPingMethodRaisesAnExceptionIfAnErrorOccurred
  • MAKS\AmqpAgent\Tests\RPC\AbstractEndpointTest::testOnMethodExecutesACallbackSuccessfully
  • MAKS\AmqpAgent\Tests\RPC\ClientEndpointTest::testConnectMethodReturnsSelf
  • MAKS\AmqpAgent\Tests\RPC\ClientEndpointTest::testRequestMethodViaAliasMethodCall
  • MAKS\AmqpAgent\Tests\RPC\ClientEndpointTest::testAnExceptionIsRaisedIfCorrelationIdOfTheResponseIsNotTheSameAsTheRequest
  • MAKS\AmqpAgent\Tests\RPC\ServerEndpointTest::testRespondMethodViaAliasMethodServe
  • MAKS\AmqpAgent\Tests\RPC\ServerEndpointTest::testAnExceptionIsRaisedIfPassedCallbackDoesNotReturnString
37
Covered by 7 test(s):
  • MAKS\AmqpAgent\Tests\Helper\EventTest::testEventDispatchAndListenMethods
  • MAKS\AmqpAgent\Tests\RPC\AbstractEndpointTest::testOnMethodExecutesACallbackSuccessfully
  • MAKS\AmqpAgent\Tests\RPC\ClientEndpointTest::testConnectMethodReturnsSelf
  • MAKS\AmqpAgent\Tests\RPC\ClientEndpointTest::testRequestMethodViaAliasMethodCall
  • MAKS\AmqpAgent\Tests\RPC\ClientEndpointTest::testAnExceptionIsRaisedIfCorrelationIdOfTheResponseIsNotTheSameAsTheRequest
  • MAKS\AmqpAgent\Tests\RPC\ServerEndpointTest::testRespondMethodViaAliasMethodServe
  • MAKS\AmqpAgent\Tests\RPC\ServerEndpointTest::testAnExceptionIsRaisedIfPassedCallbackDoesNotReturnString
38
Covered by 7 test(s):
  • MAKS\AmqpAgent\Tests\Helper\EventTest::testEventDispatchAndListenMethods
  • MAKS\AmqpAgent\Tests\RPC\AbstractEndpointTest::testOnMethodExecutesACallbackSuccessfully
  • MAKS\AmqpAgent\Tests\RPC\ClientEndpointTest::testConnectMethodReturnsSelf
  • MAKS\AmqpAgent\Tests\RPC\ClientEndpointTest::testRequestMethodViaAliasMethodCall
  • MAKS\AmqpAgent\Tests\RPC\ClientEndpointTest::testAnExceptionIsRaisedIfCorrelationIdOfTheResponseIsNotTheSameAsTheRequest
  • MAKS\AmqpAgent\Tests\RPC\ServerEndpointTest::testRespondMethodViaAliasMethodServe
  • MAKS\AmqpAgent\Tests\RPC\ServerEndpointTest::testAnExceptionIsRaisedIfPassedCallbackDoesNotReturnString
39
Covered by 7 test(s):
  • MAKS\AmqpAgent\Tests\Helper\EventTest::testEventDispatchAndListenMethods
  • MAKS\AmqpAgent\Tests\RPC\AbstractEndpointTest::testOnMethodExecutesACallbackSuccessfully
  • MAKS\AmqpAgent\Tests\RPC\ClientEndpointTest::testConnectMethodReturnsSelf
  • MAKS\AmqpAgent\Tests\RPC\ClientEndpointTest::testRequestMethodViaAliasMethodCall
  • MAKS\AmqpAgent\Tests\RPC\ClientEndpointTest::testAnExceptionIsRaisedIfCorrelationIdOfTheResponseIsNotTheSameAsTheRequest
  • MAKS\AmqpAgent\Tests\RPC\ServerEndpointTest::testRespondMethodViaAliasMethodServe
  • MAKS\AmqpAgent\Tests\RPC\ServerEndpointTest::testAnExceptionIsRaisedIfPassedCallbackDoesNotReturnString
404142
Covered by 12 test(s):
  • MAKS\AmqpAgent\Tests\Helper\EventTest::testEventDispatchAndListenMethods
  • MAKS\AmqpAgent\Tests\RPC\AbstractEndpointTest::testPingConnectMethodReturnsSelf
  • MAKS\AmqpAgent\Tests\RPC\AbstractEndpointTest::testPingConnectMethodRaisesAnExceptionIfAConnectionIsOpenAlready
  • MAKS\AmqpAgent\Tests\RPC\AbstractEndpointTest::testGetConnectionMethodReturnsAMQPStreamConnection
  • MAKS\AmqpAgent\Tests\RPC\AbstractEndpointTest::testPingMethodWhenTheEndpointIsConnected
  • MAKS\AmqpAgent\Tests\RPC\AbstractEndpointTest::testPingMethodRaisesAnExceptionIfAnErrorOccurred
  • MAKS\AmqpAgent\Tests\RPC\AbstractEndpointTest::testOnMethodExecutesACallbackSuccessfully
  • MAKS\AmqpAgent\Tests\RPC\ClientEndpointTest::testConnectMethodReturnsSelf
  • MAKS\AmqpAgent\Tests\RPC\ClientEndpointTest::testRequestMethodViaAliasMethodCall
  • MAKS\AmqpAgent\Tests\RPC\ClientEndpointTest::testAnExceptionIsRaisedIfCorrelationIdOfTheResponseIsNotTheSameAsTheRequest
  • MAKS\AmqpAgent\Tests\RPC\ServerEndpointTest::testRespondMethodViaAliasMethodServe
  • MAKS\AmqpAgent\Tests\RPC\ServerEndpointTest::testAnExceptionIsRaisedIfPassedCallbackDoesNotReturnString
4344
Covered by 12 test(s):
  • MAKS\AmqpAgent\Tests\Helper\EventTest::testEventDispatchAndListenMethods
  • MAKS\AmqpAgent\Tests\RPC\AbstractEndpointTest::testPingConnectMethodReturnsSelf
  • MAKS\AmqpAgent\Tests\RPC\AbstractEndpointTest::testPingConnectMethodRaisesAnExceptionIfAConnectionIsOpenAlready
  • MAKS\AmqpAgent\Tests\RPC\AbstractEndpointTest::testGetConnectionMethodReturnsAMQPStreamConnection
  • MAKS\AmqpAgent\Tests\RPC\AbstractEndpointTest::testPingMethodWhenTheEndpointIsConnected
  • MAKS\AmqpAgent\Tests\RPC\AbstractEndpointTest::testPingMethodRaisesAnExceptionIfAnErrorOccurred
  • MAKS\AmqpAgent\Tests\RPC\AbstractEndpointTest::testOnMethodExecutesACallbackSuccessfully
  • MAKS\AmqpAgent\Tests\RPC\ClientEndpointTest::testConnectMethodReturnsSelf
  • MAKS\AmqpAgent\Tests\RPC\ClientEndpointTest::testRequestMethodViaAliasMethodCall
  • MAKS\AmqpAgent\Tests\RPC\ClientEndpointTest::testAnExceptionIsRaisedIfCorrelationIdOfTheResponseIsNotTheSameAsTheRequest
  • MAKS\AmqpAgent\Tests\RPC\ServerEndpointTest::testRespondMethodViaAliasMethodServe
  • MAKS\AmqpAgent\Tests\RPC\ServerEndpointTest::testAnExceptionIsRaisedIfPassedCallbackDoesNotReturnString
45464748495051525354
Covered by 4 test(s):
  • MAKS\AmqpAgent\Tests\Helper\EventTest::testEventDispatchAndListenMethods
  • MAKS\AmqpAgent\Tests\RPC\AbstractEndpointTest::testOnMethodExecutesACallbackSuccessfully
  • MAKS\AmqpAgent\Tests\RPC\ClientEndpointTest::testAnExceptionIsRaisedIfCorrelationIdOfTheResponseIsNotTheSameAsTheRequest
  • MAKS\AmqpAgent\Tests\RPC\ServerEndpointTest::testRespondMethodViaAliasMethodServe
55
Covered by 4 test(s):
  • MAKS\AmqpAgent\Tests\Helper\EventTest::testEventDispatchAndListenMethods
  • MAKS\AmqpAgent\Tests\RPC\AbstractEndpointTest::testOnMethodExecutesACallbackSuccessfully
  • MAKS\AmqpAgent\Tests\RPC\ClientEndpointTest::testAnExceptionIsRaisedIfCorrelationIdOfTheResponseIsNotTheSameAsTheRequest
  • MAKS\AmqpAgent\Tests\RPC\ServerEndpointTest::testRespondMethodViaAliasMethodServe
5657585960616263
Covered by 1 test(s):
  • MAKS\AmqpAgent\Tests\Helper\EventTest::testEventDispatchAndListenMethods
646566
<?php

/**
 * @author Marwan Al-Soltany <MarwanAlsoltany@gmail.com>
 * @copyright Marwan Al-Soltany 2020
 * For the full copyright and license information, please view
 * the LICENSE file that was distributed with this source code.
 */

declare(strict_types=1);

namespace MAKS\AmqpAgent\Helper;

use Closure;

/**
 * A trait containing events handling functions (adds events triggering and binding capabilities) to a class.
 * @since 2.0.0
 */
trait EventTrait
{
    /**
     * Here lives all bindings.
     * @var array
     */
    protected static $events = [];

    /**
     * Executes callbacks attached to the passed event with the passed arguments.
     * @param string $event Event name.
     * @param array $arguments [optional] Arguments array. Note that the arguments will be spread (`...$args`) on the callback.
     * @return void
     */
    protected static function trigger(string $event, array $arguments = []): void
    {
        if (isset(self::$events[$event]) && count(self::$events[$event])) {
            $callbacks = &self::$events[$event];
            foreach ($callbacks as $callback) {
                call_user_func_array($callback, array_values($arguments));
            }
        } else {
            self::$events[$event] = [];
        }
    }

    /**
     * Binds the passed function to the passed event.
     * @param string $event Event name.
     * @param Closure $function A closure to process the event.
     * @return void
     */
    protected static function bind(string $event, Closure $function): void
    {
        self::$events[$event][] = $function;
    }

    /**
     * Returns array of all registered events as an array `['event.name' => [$cb1, $cb2, ...]]`.
     * @return array
     */
    public static function getEvents(): array
    {
        return self::$events;
    }
}