/** * Constructor * * Optionally specify project directory; $configFile will be relative to * this value. * * @param mixed $discovery * @param string $projectDirectory */ public function __construct($discovery, $projectDirectory = '') { $this->chain = Collection::create($discovery)->map(function ($discoveryClass) use($projectDirectory) { return new $discoveryClass($projectDirectory); })->filter(function ($discovery) { return $discovery->locate(); }); }
/** * Constructor * * Optionally accept the project root directory; if non-empty, it is used * to prefix the $configFile. * * @param mixed $injectors * @param DiscoveryChainInterface $discoveryChain * @param Collection $availableTypes * @param string $projectRoot */ public function __construct($injectors, DiscoveryChainInterface $discoveryChain, Collection $availableTypes, $projectRoot = '') { $this->chain = Collection::create($injectors)->filter(function ($injector, $file) use($discoveryChain) { return $discoveryChain->discoveryExists($file); })->map(function ($injector) use($projectRoot) { return new $injector($projectRoot); })->filter(function ($injector) use($availableTypes) { return $availableTypes->reduce(function ($flag, $type) use($injector) { return $flag || $injector->registersType($type); }, false); }); }
/** * Is a given metadata value (extra.zf.*) valid? * * @param string $key Key to examine in metadata * @param array $metadata * @return bool */ private function metadataForKeyIsValid($key, array $metadata) { if (!isset($metadata[$key])) { return false; } if (is_string($metadata[$key])) { return $this->moduleIsValid($metadata[$key]); } if (!is_array($metadata[$key])) { return false; } return Collection::create($metadata[$key])->reduce(function ($valid, $value) { if (false === $valid) { return $valid; } return $this->moduleIsValid($value); }, null); }
/** * Cache an injector for later use. * * @param Injector\InjectorInterface $injector * @return void */ private function cacheInjector(Injector\InjectorInterface $injector) { Collection::create($injector->getTypesAllowed())->reject(function ($type) { return isset($this->cachedInjectors[$type]); })->each(function ($type) use($injector) { $this->cachedInjectors[$type] = $injector; }); }