Example #1
0
 /**
  * Create project from Composer
  * @param string $path path to project root
  * @return Project
  */
 public static function composer($path)
 {
     $path = realpath($path);
     chdir($path);
     $composer = json_decode(FS::get($path . "/composer.json"), true);
     require_once $path . '/vendor/autoload.php';
     $project = new self($composer["name"]);
     $project->setRootDir($path);
     list($vendor, $name) = explode("/", $project->name);
     if ($vendor == $name) {
         $project->alias = ucfirst($name);
         $project->code = strtolower($name);
     } else {
         $project->alias = ucfirst($vendor) . ucfirst($name);
         $project->code = strtolower($vendor) . "_" . strtolower($name);
     }
     $project->description = $composer["description"];
     if (isset($composer["config"]["koda"]["version"])) {
         $ver = $composer["config"]["koda"]["version"];
         if (is_callable($ver)) {
             $project->version = call_user_func($ver);
         } else {
             $project->version = exec($ver);
         }
     }
     $paths = [];
     foreach ($composer["autoload"] as $loader) {
         $paths = array_merge($paths, array_values($loader));
     }
     foreach ($composer["require"] as $require => $version) {
         if (strpos($require, "ext-") === 0) {
             $project->addDepends(substr($require, 4))->setRequired();
         }
     }
     foreach ($composer["suggest"] as $suggest => $comment) {
         if (strpos($suggest, "ext-") === 0) {
             $project->addDepends(substr($suggest, 4))->setOptional();
         }
     }
     foreach ($paths as $dir) {
         $dir = realpath($dir);
         if (is_file($dir)) {
             $project->files[$dir] = new EntityFile($dir, $project);
         } else {
             $iter = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
             foreach ($iter as $file) {
                 /* @var \splFileInfo $file */
                 if ($file->isFile() && strtolower($file->getExtension()) == "php") {
                     $project->files[$file->getRealPath()] = new EntityFile($file->getRealPath(), $project);
                 }
             }
         }
     }
     return $project;
 }