committed by
phinze
11 changed files with 151 additions and 31 deletions
@ -1,7 +1,13 @@ |
|||
class Cask::Auditor |
|||
def self.audit(cask) |
|||
def self.audit(cask, options = {}) |
|||
audit = Cask::Audit.new(cask) |
|||
audit.run! |
|||
|
|||
if options.fetch(:audit_download, false) |
|||
audit.run!(Cask::Download.new(cask)) |
|||
else |
|||
audit.run! |
|||
end |
|||
|
|||
puts audit.summary |
|||
end |
|||
end |
|||
|
@ -1,12 +1,38 @@ |
|||
class Cask::CLI::Audit |
|||
def self.help |
|||
'verifies installability of casks' |
|||
end |
|||
|
|||
def self.run(*args) |
|||
casks_to_audit = args.empty? ? Cask.all : args.map { |arg| Cask.load(arg) } |
|||
casks_to_audit.each do |cask| |
|||
Cask::Auditor.audit(cask) |
|||
new(args, Cask::Auditor).run |
|||
end |
|||
|
|||
def initialize(args, auditor) |
|||
@args = args |
|||
@auditor = auditor |
|||
end |
|||
|
|||
def run |
|||
casks_to_audit.each { |cask| audit(cask) } |
|||
end |
|||
|
|||
def audit(cask) |
|||
@auditor.audit(cask, :audit_download => audit_download?) |
|||
end |
|||
|
|||
def audit_download? |
|||
@args.include?('--download') |
|||
end |
|||
|
|||
def casks_to_audit |
|||
if cask_list.empty? |
|||
Cask.all |
|||
else |
|||
cask_list.map { |arg| Cask.load(arg) } |
|||
end |
|||
end |
|||
|
|||
def self.help |
|||
"verifies installability of casks" |
|||
def cask_list |
|||
@cask_list ||= @args.reject { |a| a == '--download' } |
|||
end |
|||
end |
|||
|
@ -0,0 +1,30 @@ |
|||
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 |
@ -0,0 +1,45 @@ |
|||
require 'test_helper' |
|||
|
|||
describe Cask::CLI::Audit do |
|||
let(:auditor) { mock() } |
|||
let(:cask) { mock() } |
|||
|
|||
describe 'selection of casks to audit' do |
|||
it 'audits all casks if no names are given' do |
|||
Cask.stubs(:all => [cask, cask]) |
|||
auditor.expects(:audit).times(2) |
|||
|
|||
run_audit([], auditor) |
|||
end |
|||
|
|||
it 'audits specified casks if names are given' do |
|||
cask_name = 'nice-app' |
|||
Cask.expects(:load).with(cask_name).returns(cask) |
|||
auditor.expects(:audit).with(cask, :audit_download => false) |
|||
|
|||
run_audit([cask_name], auditor) |
|||
end |
|||
end |
|||
|
|||
describe 'rules for downloading a cask' do |
|||
it 'does not download the cask per default' do |
|||
Cask.stubs(:load => cask) |
|||
|
|||
auditor.expects(:audit).with(cask, :audit_download => false) |
|||
|
|||
run_audit(['caskname'], auditor) |
|||
end |
|||
|
|||
it 'download a cask if --download flag is set' do |
|||
Cask.stubs(:load => cask) |
|||
|
|||
auditor.expects(:audit).with(cask, :audit_download => true) |
|||
|
|||
run_audit(['caskname', '--download'], auditor) |
|||
end |
|||
end |
|||
|
|||
def run_audit(args, auditor) |
|||
Cask::CLI::Audit.new(args, auditor).run |
|||
end |
|||
end |
Loading…
Reference in new issue