You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
868 B
31 lines
868 B
12 years ago
|
class Cask::Download
|
||
|
attr_reader :cask
|
||
|
|
||
|
def initialize(cask)
|
||
|
@cask = cask
|
||
|
end
|
||
|
|
||
|
def perform
|
||
|
require 'formula_support'
|
||
|
software_spec = SoftwareSpec.new(cask.url.to_s, cask.version)
|
||
|
downloader = CurlDownloadStrategy.new(cask.title, software_spec)
|
||
|
downloaded_path = downloader.fetch
|
||
|
|
||
|
_check_sums(downloaded_path, cask.sums) unless cask.sums === 0
|
||
|
downloaded_path
|
||
|
end
|
||
|
|
||
|
private
|
||
|
def _check_sums(path, sums)
|
||
|
has_sum = false
|
||
|
sums.each do |sum|
|
||
|
unless sum.empty?
|
||
|
computed = Checksum.new(sum.hash_type, Digest.const_get(sum.hash_type.to_s.upcase).file(path).hexdigest)
|
||
|
raise ChecksumMismatchError.new(sum, computed) unless sum == computed
|
||
|
has_sum = true
|
||
|
end
|
||
|
end
|
||
|
raise ChecksumMissingError.new("Checksum required. SHA1: '#{Digest::SHA1.file(path).hexdigest}'") unless has_sum
|
||
|
end
|
||
|
end
|