Class: Lexicon::Common::Remote::PackageDownloader

Inherits:
RemoteBase
  • Object
show all
Defined in:
lib/lexicon/common/remote/package_downloader.rb

Instance Method Summary collapse

Constructor Details

#initialize(s3:, out_dir:, package_loader:) ⇒ PackageDownloader

Returns a new instance of PackageDownloader.

Parameters:

  • s3 (S3Client)
  • out_dir (Pathname)
  • package_loader (DirectoryPackageLoader)


12
13
14
15
16
17
# File 'lib/lexicon/common/remote/package_downloader.rb', line 12

def initialize(s3:, out_dir:, package_loader:)
  super(s3: s3)

  @out_dir = out_dir
  @package_loader = package_loader
end

Instance Method Details

#download(version) ⇒ Corindon::Result::Result

Parameters:

  • version (Semantic::Version)

Returns:

  • (Corindon::Result::Result)


21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/lexicon/common/remote/package_downloader.rb', line 21

def download(version)
  rescue_failure do
    bucket = version.to_s

    if s3.bucket_exist?(bucket)
      Dir.mktmpdir(nil, out_dir) do |tmp_dir|
        tmp_dir = Pathname.new(tmp_dir)

        download_spec_files(bucket, tmp_dir).unwrap!

        package = package_loader.load_package(tmp_dir.basename.to_s)
        if !package.nil?
          puts "[  OK ] Found package with key #{version}, version is #{package.version}".green

          download_data_files(package, bucket).unwrap!

          dest_dir = out_dir.join(version.to_s)
          FileUtils.mkdir_p(dest_dir)

          tmp_dir.children.each do |child|
            FileUtils.mv(child.to_s, dest_dir.join(child.basename).to_s)
          end

          Success(package)
        else
          puts "[ NOK ] The remote contains a bucket '#{version}' but it does not contains a valid package.".red

          Failure(StandardError.new("The folder #{bucket} on the server does not contain a valid package"))
        end
      end
    else
      Failure(StandardError.new("The server does not have a directory named #{bucket}"))
    end
  end
end