diff --git a/composer.json b/composer.json index b958522..250829e 100644 --- a/composer.json +++ b/composer.json @@ -14,9 +14,9 @@ ], "require": { "php": ">=5.5.0", - "silex/silex": "~1.3", + "silex/silex": "~2.0", "php-amqplib/rabbitmq-bundle": "~1.9", - "ivoba/console-service-provider": "~2.0" + "ivoba/console-service-provider": "~3.0" }, "require-dev": { "phpunit/phpunit": "~4.8" diff --git a/src/fiunchinho/Silex/Provider/RabbitServiceProvider.php b/src/fiunchinho/Silex/Provider/RabbitServiceProvider.php index 433651c..2667c4f 100644 --- a/src/fiunchinho/Silex/Provider/RabbitServiceProvider.php +++ b/src/fiunchinho/Silex/Provider/RabbitServiceProvider.php @@ -10,46 +10,42 @@ use OldSound\RabbitMqBundle\RabbitMq\RpcServer; use PhpAmqpLib\Connection\AMQPConnection; use PhpAmqpLib\Connection\AMQPLazyConnection; -use Silex\Application; -use Silex\ServiceProviderInterface; +use Pimple\Container; +use Pimple\ServiceProviderInterface; class RabbitServiceProvider implements ServiceProviderInterface { const DEFAULT_CONNECTION = 'default'; - public function register(Application $app) - { - $this->loadConnections($app); - $this->loadProducers($app); - $this->loadConsumers($app); - $this->loadAnonymousConsumers($app); - $this->loadMultipleConsumers($app); - $this->loadRpcClients($app); - $this->loadRpcServers($app); - } - - public function boot(Application $app) + public function register(Container $container) { + $this->loadConnections($container); + $this->loadProducers($container); + $this->loadConsumers($container); + $this->loadAnonymousConsumers($container); + $this->loadMultipleConsumers($container); + $this->loadRpcClients($container); + $this->loadRpcServers($container); } /** - * @param Application $app + * @param Container $container * @throws \InvalidArgumentException */ - private function loadConnections(Application $app) + private function loadConnections(Container $container) { - $app['rabbit.connection'] = $app->share(function ($app) { - if (!isset($app['rabbit.connections'])) { + $container['rabbit.connection'] = function ($container) { + if (!isset($container['rabbit.connections'])) { throw new \InvalidArgumentException('You need to specify at least a connection in your configuration.'); } $connections = []; - foreach ($app['rabbit.connections'] as $name => $options) { + foreach ($container['rabbit.connections'] as $name => $options) { $lazyConnection = false; - if (isset($app['rabbit.connections'][$name]['lazy'])) { - if ($app['rabbit.connections'][$name]['lazy'] === true) { + if (isset($container['rabbit.connections'][$name]['lazy'])) { + if ($container['rabbit.connections'][$name]['lazy'] === true) { $lazyConnection = true; } } @@ -57,20 +53,20 @@ private function loadConnections(Application $app) switch ($lazyConnection) { case (true): $connection = new AMQPLazyConnection( - $app['rabbit.connections'][$name]['host'], - $app['rabbit.connections'][$name]['port'], - $app['rabbit.connections'][$name]['user'], - $app['rabbit.connections'][$name]['password'], - $app['rabbit.connections'][$name]['vhost'] + $container['rabbit.connections'][$name]['host'], + $container['rabbit.connections'][$name]['port'], + $container['rabbit.connections'][$name]['user'], + $container['rabbit.connections'][$name]['password'], + $container['rabbit.connections'][$name]['vhost'] ); break; default: $connection = new AMQPConnection( - $app['rabbit.connections'][$name]['host'], - $app['rabbit.connections'][$name]['port'], - $app['rabbit.connections'][$name]['user'], - $app['rabbit.connections'][$name]['password'], - $app['rabbit.connections'][$name]['vhost'] + $container['rabbit.connections'][$name]['host'], + $container['rabbit.connections'][$name]['port'], + $container['rabbit.connections'][$name]['user'], + $container['rabbit.connections'][$name]['password'], + $container['rabbit.connections'][$name]['vhost'] ); } @@ -78,17 +74,17 @@ private function loadConnections(Application $app) } return $connections; - }); + }; } /** - * @param Application $app + * @param Container $container * @param array $options * @param array $connections * @return AMQPLazyConnection|AMQPConnection * @throws \InvalidArgumentException */ - private function getConnection(Application $app, $options, $connections) + private function getConnection(Container $container, $options, $connections) { $connection_name = $options['connection']?: self::DEFAULT_CONNECTION; @@ -96,23 +92,23 @@ private function getConnection(Application $app, $options, $connections) throw new \InvalidArgumentException('Configuration for connection [' . $connection_name . '] not found'); } - return $app['rabbit.connection'][$connection_name]; + return $container['rabbit.connection'][$connection_name]; } /** - * @param Application $app + * @param Container $container */ - private function loadProducers(Application $app) + private function loadProducers(Container $container) { - $app['rabbit.producer'] = $app->share(function ($app) { - if (!isset($app['rabbit.producers'])) { + $container['rabbit.producer'] = function ($container) { + if (!isset($container['rabbit.producers'])) { return null; } $producers = []; - foreach ($app['rabbit.producers'] as $name => $options) { - $connection = $this->getConnection($app, $options, $app['rabbit.connections']); + foreach ($container['rabbit.producers'] as $name => $options) { + $connection = $this->getConnection($container, $options, $container['rabbit.connections']); $producer = new Producer($connection); $producer->setExchangeOptions($options['exchange_options']); @@ -131,27 +127,27 @@ private function loadProducers(Application $app) } return $producers; - }); + }; } /** - * @param Application $app + * @param Container $container */ - private function loadConsumers(Application $app) + private function loadConsumers(Container $container) { - $app['rabbit.consumer'] = $app->share(function ($app) { - if (!isset($app['rabbit.consumers'])) { + $container['rabbit.consumer'] = function ($container) { + if (!isset($container['rabbit.consumers'])) { return null; } $consumers = []; - foreach ($app['rabbit.consumers'] as $name => $options) { - $connection = $this->getConnection($app, $options, $app['rabbit.connections']); + foreach ($container['rabbit.consumers'] as $name => $options) { + $connection = $this->getConnection($container, $options, $container['rabbit.connections']); $consumer = new Consumer($connection); $consumer->setExchangeOptions($options['exchange_options']); $consumer->setQueueOptions($options['queue_options']); - $consumer->setCallback(array($app[$options['callback']], 'execute')); + $consumer->setCallback(array($container[$options['callback']], 'execute')); if (array_key_exists('qos_options', $options)) { $consumer->setQosOptions( @@ -173,54 +169,54 @@ private function loadConsumers(Application $app) } return $consumers; - }); + }; } /** - * @param Application $app + * @param Container $container */ - private function loadAnonymousConsumers(Application $app) + private function loadAnonymousConsumers(Container $container) { - $app['rabbit.anonymous_consumer'] = $app->share(function ($app) { - if (!isset($app['rabbit.anon_consumers'])) { + $container['rabbit.anonymous_consumer'] = function ($container) { + if (!isset($container['rabbit.anon_consumers'])) { return null; } $consumers = []; - foreach ($app['rabbit.anon_consumers'] as $name => $options) { - $connection = $this->getConnection($app, $options, $app['rabbit.connections']); + foreach ($container['rabbit.anon_consumers'] as $name => $options) { + $connection = $this->getConnection($container, $options, $container['rabbit.connections']); $consumer = new AnonConsumer($connection); $consumer->setExchangeOptions($options['exchange_options']); - $consumer->setCallback(array($app[$options['callback']], 'execute')); + $consumer->setCallback(array($container[$options['callback']], 'execute')); $consumers[$name] = $consumer; } return $consumers; - }); + }; } /** - * @param Application $app + * @param Container $container */ - private function loadMultipleConsumers(Application $app) + private function loadMultipleConsumers(Container $container) { - $app['rabbit.multiple_consumer'] = $app->share(function ($app) { - if (!isset($app['rabbit.multiple_consumers'])) { + $container['rabbit.multiple_consumer'] = function ($container) { + if (!isset($container['rabbit.multiple_consumers'])) { return null; } $consumers = []; - foreach ($app['rabbit.multiple_consumers'] as $name => $options) { - $connection = $this->getConnection($app, $options, $app['rabbit.connections']); + foreach ($container['rabbit.multiple_consumers'] as $name => $options) { + $connection = $this->getConnection($container, $options, $container['rabbit.connections']); $consumer = new MultipleConsumer($connection); $consumer->setExchangeOptions($options['exchange_options']); foreach ($options['queues'] as &$queue) { if (isset($queue['callback'])) { - $queue['callback'] = array($app[$queue['callback']], 'execute'); + $queue['callback'] = array($container[$queue['callback']], 'execute'); } } @@ -246,24 +242,24 @@ private function loadMultipleConsumers(Application $app) } return $consumers; - }); + }; } /** - * @param Application $app + * @param Container $container */ - private function loadRpcClients(Application $app) + private function loadRpcClients(Container $container) { - $app['rabbit.rpc_client'] = $app->share(function ($app) { - if (!isset($app['rabbit.rpc_clients'])) { + $container['rabbit.rpc_client'] = function ($container) { + if (!isset($container['rabbit.rpc_clients'])) { return null; } $clients = []; - foreach ($app['rabbit.rpc_clients'] as $name => $options) { - $connection = $this->getConnection($app, $options, $app['rabbit.connections']); + foreach ($container['rabbit.rpc_clients'] as $name => $options) { + $connection = $this->getConnection($container, $options, $container['rabbit.connections']); $client = new RpcClient($connection); if (array_key_exists('expect_serialized_response', $options)) { @@ -274,26 +270,26 @@ private function loadRpcClients(Application $app) } return $clients; - }); + }; } /** - * @param Application $app + * @param Container $container */ - private function loadRpcServers(Application $app) + private function loadRpcServers(Container $container) { - $app['rabbit.rpc_server'] = $app->share(function ($app) { - if (!isset($app['rabbit.rpc_servers'])) { + $container['rabbit.rpc_server'] = function ($container) { + if (!isset($container['rabbit.rpc_servers'])) { return null; } $servers = []; - foreach ($app['rabbit.rpc_servers'] as $name => $options) { - $connection = $this->getConnection($app, $options, $app['rabbit.connections']); + foreach ($container['rabbit.rpc_servers'] as $name => $options) { + $connection = $this->getConnection($container, $options, $container['rabbit.connections']); $server = new RpcServer($connection); $server->initServer($name); - $server->setCallback(array($app[$options['callback']], 'execute')); + $server->setCallback(array($container[$options['callback']], 'execute')); if (array_key_exists('qos_options', $options)) { $server->setQosOptions( @@ -307,7 +303,7 @@ private function loadRpcServers(Application $app) } return $servers; - }); + }; } } diff --git a/tests/fiunchinho/Tests/Silex/Provider/RabbitServiceProviderTest.php b/tests/fiunchinho/Tests/Silex/Provider/RabbitServiceProviderTest.php index 0d59182..59690d1 100644 --- a/tests/fiunchinho/Tests/Silex/Provider/RabbitServiceProviderTest.php +++ b/tests/fiunchinho/Tests/Silex/Provider/RabbitServiceProviderTest.php @@ -8,27 +8,27 @@ use OldSound\RabbitMqBundle\RabbitMq\RpcClient; use OldSound\RabbitMqBundle\RabbitMq\RpcServer; use PhpAmqpLib\Connection\AMQPStreamConnection; -use Silex\Application; +use Pimple\Container; class RabbitServiceProviderTest extends \PHPUnit_Framework_TestCase { public function testConnectionsAreRegistered() { - $app = new Application(); + $container = new Container(); - $app->register(new RabbitServiceProvider(), [ + $container->register(new RabbitServiceProvider(), [ 'rabbit.connections' => $this->givenValidConnectionDefinitions() ]); - $this->assertInstanceOf(AMQPStreamConnection::class, $app['rabbit.connection']['default']); - $this->assertInstanceOf(AMQPStreamConnection::class, $app['rabbit.connection']['another']); + $this->assertInstanceOf(AMQPStreamConnection::class, $container['rabbit.connection']['default']); + $this->assertInstanceOf(AMQPStreamConnection::class, $container['rabbit.connection']['another']); } public function testProducersAreRegistered() { - $app = new Application(); + $container = new Container(); - $app->register(new RabbitServiceProvider(), [ + $container->register(new RabbitServiceProvider(), [ 'rabbit.connections' => $this->givenValidConnectionDefinitions(), 'rabbit.producers' => [ 'a_producer' => [ @@ -42,15 +42,19 @@ public function testProducersAreRegistered() ] ]); - $this->assertInstanceOf(Producer::class, $app['rabbit.producer']['a_producer']); - $this->assertInstanceOf(Producer::class, $app['rabbit.producer']['second_producer']); + $this->assertInstanceOf(Producer::class, $container['rabbit.producer']['a_producer']); + $this->assertInstanceOf(Producer::class, $container['rabbit.producer']['second_producer']); } public function testConsumersAreRegistered() { - $app = new Application(); + $container = new Container(); - $app->register(new RabbitServiceProvider(), [ + $container['debug'] = function() { + return true; + }; + + $container->register(new RabbitServiceProvider(), [ 'rabbit.connections' => $this->givenValidConnectionDefinitions(), 'rabbit.consumers' => [ 'a_consumer' => [ @@ -68,15 +72,19 @@ public function testConsumersAreRegistered() ] ]); - $this->assertInstanceOf(Consumer::class, $app['rabbit.consumer']['a_consumer']); - $this->assertInstanceOf(Consumer::class, $app['rabbit.consumer']['second_consumer']); + $this->assertInstanceOf(Consumer::class, $container['rabbit.consumer']['a_consumer']); + $this->assertInstanceOf(Consumer::class, $container['rabbit.consumer']['second_consumer']); } public function testAnonymousConsumersAreRegistered() { - $app = new Application(); + $container = new Container(); + + $container['debug'] = function() { + return true; + }; - $app->register(new RabbitServiceProvider(), [ + $container->register(new RabbitServiceProvider(), [ 'rabbit.connections' => $this->givenValidConnectionDefinitions(), 'rabbit.anon_consumers' => [ 'anoymous' => [ @@ -87,14 +95,18 @@ public function testAnonymousConsumersAreRegistered() ] ]); - $this->assertInstanceOf(Consumer::class, $app['rabbit.anonymous_consumer']['anoymous']); + $this->assertInstanceOf(Consumer::class, $container['rabbit.anonymous_consumer']['anoymous']); } public function testMultiplesConsumersAreRegistered() { - $app = new Application(); + $container = new Container(); - $app->register(new RabbitServiceProvider(), [ + $container['debug'] = function() { + return true; + }; + + $container->register(new RabbitServiceProvider(), [ 'rabbit.connections' => $this->givenValidConnectionDefinitions(), 'rabbit.multiple_consumers' => [ 'multiple' => [ @@ -107,14 +119,14 @@ public function testMultiplesConsumersAreRegistered() ] ]); - $this->assertInstanceOf(Consumer::class, $app['rabbit.multiple_consumer']['multiple']); + $this->assertInstanceOf(Consumer::class, $container['rabbit.multiple_consumer']['multiple']); } public function testRpcClientsAreRegistered() { - $app = new Application(); + $container = new Container(); - $app->register(new RabbitServiceProvider(), [ + $container->register(new RabbitServiceProvider(), [ 'rabbit.connections' => $this->givenValidConnectionDefinitions(), 'rabbit.rpc_clients' => [ 'a_client' => [ @@ -124,14 +136,18 @@ public function testRpcClientsAreRegistered() ] ]); - $this->assertInstanceOf(RpcClient::class, $app['rabbit.rpc_client']['a_client']); + $this->assertInstanceOf(RpcClient::class, $container['rabbit.rpc_client']['a_client']); } public function testRpcServersAreRegistered() { - $app = new Application(); + $container = new Container(); + + $container['debug'] = function() { + return true; + }; - $app->register(new RabbitServiceProvider(), [ + $container->register(new RabbitServiceProvider(), [ 'rabbit.connections' => $this->givenValidConnectionDefinitions(), 'rabbit.rpc_servers' => [ 'a_server' => [ @@ -142,21 +158,21 @@ public function testRpcServersAreRegistered() ] ]); - $this->assertInstanceOf(RpcServer::class, $app['rabbit.rpc_server']['a_server']); + $this->assertInstanceOf(RpcServer::class, $container['rabbit.rpc_server']['a_server']); } private function givenValidConnectionDefinitions() { return [ 'default' => [ - 'host' => 'localhost', + 'host' => '192.168.175.56', 'port' => 5672, 'user' => 'guest', 'password' => 'guest', 'vhost' => '/' ], 'another' => [ - 'host' => 'localhost', + 'host' => '192.168.175.56', 'port' => 5672, 'user' => 'guest', 'password' => 'guest',