/** * Get list of services provided. * * @throws LackOfCoffeeException * @return array */ public function provides() { return Std::concat(Arr::keys($this->getServiceMap()), Arr::keys($this->getSingletons())); }
/** * Get the names of all the registered modules. * * @return string[] */ public function getModuleNames() { return Arr::keys($this->modules); }
/** * Check an input array against the SpecGraph. * * @param array $input * * @throws CoreException * @throws Exceptions\InvalidArgumentException * @return SpecResult */ public function check(array $input) { // Automatic reset if (count($this->pending) === 0) { foreach (Arr::keys($this->nodes) as $name) { if (count($this->incomingEdges[$name]) === 0) { $this->pending[] = $name; } } $this->checked = []; $this->results = []; $this->failed = false; } // Actual process while (count($this->checked) < count($this->nodes)) { if (count($this->pending) === 0) { throw new CoreException('Unable to resolve constraint graph.'); } $this->iterate($input); if ($this->failed) { $this->pending = []; break; } } // Aggregate results $missing = []; $failed = []; array_map(function (SpecResult $result) use(&$missing, &$failed) { $missing[] = $result->getMissing(); $failed[] = $result->getFailed(); }, $this->checked); return new SpecResult(Arr::mergev($missing), Arr::mergev($failed), $this->failed ? SpecResult::STATUS_FAIL : SpecResult::STATUS_PASS); }