/** * Adds the createDiscovery() method. * * @param Clazz $class The factory class model. */ private function addCreateDiscoveryMethod(Clazz $class) { $method = new Method('createDiscovery'); $method->setDescription('Creates the resource discovery.'); $arg = new Argument(self::REPO_VAR_NAME); $arg->setTypeHint('ResourceRepository'); $arg->setType('ResourceRepository'); $arg->setDescription('The resource repository to read from.'); $method->addArgument($arg); $method->setReturnValue(new ReturnValue('$' . self::DISCOVERY_VAR_NAME, 'ResourceDiscovery', 'The created resource discovery.')); $method->addBody(<<<EOF if (!interface_exists('Puli\\Discovery\\Api\\ResourceDiscovery')) { throw new RuntimeException('Please install puli/discovery to create ResourceDiscovery instances.'); } EOF ); $class->addImport(new Import('Puli\\Repository\\Api\\ResourceRepository')); $class->addImport(new Import('Puli\\Discovery\\Api\\ResourceDiscovery')); $class->addImport(new Import('RuntimeException')); $class->addMethod($method); // Add method body $config = $this->environment->getConfig(); $type = $config->get(Config::DISCOVERY_TYPE); $options = $this->camelizeKeys($config->get(Config::DISCOVERY)); $options['rootDir'] = $this->rootDir; $generator = $this->generatorRegistry->getServiceGenerator(GeneratorRegistry::DISCOVERY, $type); $generator->generateNewInstance(self::DISCOVERY_VAR_NAME, $method, $this->generatorRegistry, $options); }
public function testCreate() { $config = new Config(); $rootPackageFile = new RootPackageFile(); $environment = new ProjectEnvironment(null, __DIR__, $config, $rootPackageFile); $this->assertNull($environment->getHomeDirectory()); $this->assertSame(__DIR__, $environment->getRootDirectory()); $this->assertSame($config, $environment->getConfig()); $this->assertSame($rootPackageFile, $environment->getRootPackageFile()); $this->assertNull($environment->getConfigFile()); $this->assertInstanceOf('Symfony\\Component\\EventDispatcher\\EventDispatcherInterface', $environment->getEventDispatcher()); }
/** * Creates a repository manager. * * @param ProjectEnvironment $environment * @param EditableRepository $repo * @param PackageCollection $packages * @param PackageFileStorage $packageFileStorage */ public function __construct(ProjectEnvironment $environment, EditableRepository $repo, PackageCollection $packages, PackageFileStorage $packageFileStorage) { $this->environment = $environment; $this->dispatcher = $environment->getEventDispatcher(); $this->repo = $repo; $this->config = $environment->getConfig(); $this->rootDir = $environment->getRootDirectory(); $this->rootPackage = $packages->getRootPackage(); $this->rootPackageFile = $environment->getRootPackageFile(); $this->packages = $packages; $this->packageFileStorage = $packageFileStorage; }