remoteFilesystem = $remoteFilesystem; $this->source = $source; $this->filenames = $filenames; $this->fs = new Filesystem(); } public function fetch($version, $destination) { array_walk($this->filenames, function ($filename) use ($version, $destination) { $url = $this->getUri($filename, $version); $this->fs->ensureDirectoryExists($destination . '/' . dirname($filename)); $this->remoteFilesystem->copy($url, $url, $destination . '/' . $filename); }); } protected function getUri($filename, $version) { $map = [ '{path}' => $filename, '{version}' => $version ]; return str_replace(array_keys($map), array_values($map), $this->source); } }