/**
  * @dataProvider namedFunctions
  */
 public function testProxyFunctionCalls($name, $value = null)
 {
     if (null === $value) {
         $value = [];
     }
     $pheanstalkProxy = new PheanstalkProxy();
     $pheanstalkMock = $this->getMockForAbstractClass(PheanstalkInterface::class);
     $dispatchMock = $this->getMockForAbstractClass(EventDispatcherInterface::class);
     $pheanstalkMock->expects($this->atLeastOnce())->method($name);
     $pheanstalkProxy->setPheanstalk($pheanstalkMock);
     $pheanstalkProxy->setDispatcher($dispatchMock);
     call_user_func_array([$pheanstalkProxy, $name], $value);
 }
 public function register(Container $app)
 {
     $app['pheanstalks.options.initializer'] = $app->protect(function () use($app) {
         static $initialized = false;
         if ($initialized) {
             return;
         }
         $initialized = true;
         if (!isset($app['pheanstalks.options'])) {
             $app['pheanstalks.options'] = ['default' => isset($app['pheanstalk.options']) ? $app['pheanstalk.options'] : []];
         }
         $app['pheanstalks.options'] = array_map(function ($options) use($app) {
             return array_replace($app['pheanstalk.default_options'], $options);
         }, $app['pheanstalks.options']);
         if (!isset($app['pheanstalks.default'])) {
             $app['pheanstalks.default'] = array_keys(array_slice($app['pheanstalks.options'], 0, 1))[0];
         }
     });
     $app['pheanstalk.listener.log'] = function () use($app) {
         $listener = new PheanstalkLogListener();
         if ($app['logger']) {
             $listener->setLogger($app['logger']);
         }
         return $listener;
     };
     $app['pheanstalk.proxy.factory'] = $app->protect(function ($name, PheanstalkInterface $pheanstalk) use($app) {
         $proxy = new PheanstalkProxy();
         $proxy->setName($name);
         $proxy->setPheanstalk($pheanstalk);
         $proxy->setDispatcher($app['dispatcher']);
         return $proxy;
     });
     $app['pheanstalks'] = function (Container $app) {
         $app['pheanstalks.options.initializer']();
         $locator = new PheanstalkLocator();
         foreach ($app['pheanstalks.options'] as $name => $options) {
             $pheanstalk = new Pheanstalk($options['server'], $options['port'], $options['timeout']);
             $locator->addPheanstalk($name, $app['pheanstalk.proxy.factory']($name, $pheanstalk), $app['pheanstalks.default'] === $name);
         }
         return $locator;
     };
     $app['pheanstalk.commands'] = $app->protect(function () use($app) {
         $locator = $app['pheanstalks'];
         return [new DeleteJobCommand($locator), new FlushTubeCommand($locator), new KickCommand($locator), new KickJobCommand($locator), new ListTubeCommand($locator), new NextReadyCommand($locator), new PauseTubeCommand($locator), new PeekCommand($locator), new PeekTubeCommand($locator), new PutCommand($locator), new StatsCommand($locator), new StatsJobCommand($locator), new StatsTubeCommand($locator)];
     });
     // shortcuts for the "first" pheanstalk
     $app['pheanstalk'] = function (Container $app) {
         $pheanstalks = $app['pheanstalks'];
         return $pheanstalks->getPheanstalk($app['pheanstalks.default']);
     };
     $app['pheanstalk.default_options'] = ['server' => '127.0.0.1', 'port' => PheanstalkInterface::DEFAULT_PORT, 'timeout' => PheanstalkInterface::DEFAULT_TTR];
     if (isset($app['console'])) {
         $app['console'] = $app->extend('console', function (ConsoleApplication $console, Container $app) {
             $commands = $app['pheanstalk.commands']();
             foreach ($commands as $command) {
                 $console->add($command);
             }
             return $console;
         });
     }
 }