aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/cask/lib/hbc/download.rb
blob: 43ccfb97e14f62a561cb25318d173fb6d5d39f14 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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
require "fileutils"
require "hbc/verify"

module Hbc
  class Download
    attr_reader :cask

    def initialize(cask, force: false)
      @cask = cask
      @force = force
    end

    def perform
      clear_cache
      fetch
      downloaded_path
    end

    private

    attr_reader :force
    attr_accessor :downloaded_path

    def downloader
      @downloader ||= case cask.url.using
      when :svn
        SubversionDownloadStrategy.new(cask)
      when :post
        CurlPostDownloadStrategy.new(cask)
      else
        CurlDownloadStrategy.new(cask)
      end
    end

    def clear_cache
      downloader.clear_cache if force || cask.version.latest?
    end

    def fetch
      self.downloaded_path = downloader.fetch
    rescue StandardError => e
      raise CaskError, "Download failed on Cask '#{cask}' with message: #{e}"
    end
  end
end