protected function requestProjects($name, \Closure $finder, $nameKey)
    {
        $projects = [];

        if ($this->repoParser->isConcrete($name)) {
            $project                       = $this->getProject($name);
            $projects[$project->getName()] = $project;
        } else {
            $repos = $finder($name);

            if (true === $this->repoParser->isWildcard($name)) {
                foreach ((array) $repos as $repo) {
                    $project                       = $this->getProject($repo[$nameKey]);
                    $projects[$project->getName()] = $project;
                }
            } else {
                foreach ((array) $repos as $repo) {
                    if (false === $this->repoParser->matchesRegex($name, $repo[$nameKey])) {
                        continue;
                    }
                    $project                       = $this->getProject($repo[$nameKey]);
                    $projects[$project->getName()] = $project;
                }
            }
        }

        return $projects;
    }