Ejemplo n.º 1
0
 /**
  * @param Container $container
  */
 public function register(Container $container)
 {
     $container['console.cache'] = null;
     $container['console.command.paths'] = function () {
         $paths = array();
         return $paths;
     };
     $container['console.commands'] = function () use($container) {
         $commands = array();
         return $commands;
     };
     $container['console'] = function () use($container) {
         $console = new ConsoleApplication($container);
         // automatically detect dispatcher (e.g. in Silex applications)
         if (isset($container['dispatcher']) && !is_null($container['dispatcher'])) {
             $console->setDispatcher($container['dispatcher']);
         }
         foreach ($container['console.commands'] as $command) {
             $console->add($command);
         }
         if (!is_null($container['console.cache'])) {
             if (!is_null($container['console.cache']) && !is_dir($container['console.cache'])) {
                 mkdir($container['console.cache'], 0777, true);
             }
             $cacheFile = $container['console.cache'] . '/saxulum-console.php';
             if ($container['debug'] || !file_exists($cacheFile)) {
                 file_put_contents($cacheFile, '<?php return ' . var_export($container['console.command.search'](), true) . ';');
             }
             $commandsMap = (require $cacheFile);
         } else {
             $commandsMap = $container['console.command.search']();
         }
         foreach ($commandsMap as $commandClass) {
             $command = new $commandClass();
             $console->add($command);
         }
         return $console;
     };
     $container['console.command.search'] = $container->protect(function () use($container) {
         $commandsMap = array();
         foreach ($container['console.command.paths'] as $path) {
             foreach (Finder::create()->files()->name('*.php')->in($path) as $file) {
                 /** @var SplFileInfo $file */
                 $classes = ClassFinder::findClasses($file->getContents());
                 foreach ($classes as $class) {
                     $reflectionClass = new \ReflectionClass($class);
                     if ($reflectionClass->isSubclassOf('Saxulum\\Console\\Command\\AbstractPimpleCommand') && $reflectionClass->isInstantiable()) {
                         $commandsMap[] = $class;
                     }
                 }
             }
         }
         return $commandsMap;
     });
 }
 public function testClassFinder()
 {
     $phpCode = file_get_contents(__DIR__ . '/data/Sample.php');
     $classes = ClassFinder::findClasses($phpCode);
     $this->assertCount(10, $classes);
     $this->assertEquals('What\\A\\SpecialNamespace\\Test1', $classes[0]);
     $this->assertEquals('What\\A\\SpecialNamespace\\Test2', $classes[1]);
     $this->assertEquals('What\\A\\SpecialNamespace\\Test3', $classes[2]);
     $this->assertEquals('Yet\\Another\\SpecialNamespace\\Test4', $classes[3]);
     $this->assertEquals('Yet\\Another\\SpecialNamespace\\Test5', $classes[4]);
     $this->assertEquals('Single\\Line\\Test\\X', $classes[5]);
     $this->assertEquals('Add\\More\\LineBreaks\\Y', $classes[6]);
     $this->assertEquals('Add\\More\\LineBreaks\\Z', $classes[7]);
     $this->assertEquals('Without\\Braces\\SomeClass', $classes[8]);
     $this->assertEquals('Another\\Without\\Braces\\WhatAClass', $classes[9]);
 }
 /**
  * @param  SplFileInfo $file
  * @return array
  */
 public static function findClassesWithinAFile(SplFileInfo $file)
 {
     return ClassFinder::findClasses($file->getContents());
 }