--- /dev/null
+<?php
+
+/**
+ * @file
+ * Contains \DrupalComposer\DrupalScaffold\FileFetcher.
+ */
+
+namespace DrupalComposer\DrupalScaffold;
+
+use Composer\Util\Filesystem;
+use Composer\Util\RemoteFilesystem;
+
+class FileFetcher {
+
+ /**
+ * @var \Composer\Util\RemoteFilesystem
+ */
+ protected $remoteFilesystem;
+
+ protected $source;
+ protected $filenames;
+ protected $fs;
+
+ public function __construct(RemoteFilesystem $remoteFilesystem, $source, $filenames = []) {
+ $this->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);
+ }
+
+}