Merge pull request #4564 from reitermarkus/not-a-cask-file-error

Raise error when file does not contain a cask.
This commit is contained in:
Markus Reiter 2018-07-29 12:31:49 +02:00 committed by GitHub
commit 3c3b05d457
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 56 additions and 3 deletions

View File

@ -17,7 +17,11 @@ module Hbc
return to_enum unless block_given?
Tap.flat_map(&:cask_files).each do |f|
yield CaskLoader::FromTapPathLoader.new(f).load
begin
yield CaskLoader::FromTapPathLoader.new(f).load
rescue CaskUnreadableError => e
opoo e.message
end
end
end

View File

@ -54,7 +54,15 @@ module Hbc
@content = IO.read(path)
instance_eval(content, path)
begin
instance_eval(content, path).tap do |cask|
unless cask.is_a?(Cask)
raise CaskUnreadableError.new(token, "'#{path}' does not contain a cask.")
end
end
rescue NameError, ArgumentError, ScriptError => e
raise CaskUnreadableError.new(token, e.message)
end
end
private

View File

@ -36,6 +36,12 @@ module Hbc
end
end
class CaskUnreadableError < CaskUnavailableError
def to_s
"Cask '#{token}' is unreadable" << (reason.empty? ? "." : ": #{reason}")
end
end
class CaskAlreadyCreatedError < AbstractCaskErrorWithToken
def to_s
%Q(Cask '#{token}' already exists. Run #{Formatter.identifier("brew cask edit #{token}")} to edit it.)

View File

@ -0,0 +1,35 @@
describe Hbc::CaskLoader::FromPathLoader do
describe "#load" do
context "when the file does not contain a cask" do
let(:path) {
(mktmpdir/"cask.rb").tap do |path|
path.write <<~RUBY
true
RUBY
end
}
it "raises an error" do
expect {
described_class.new(path).load
}.to raise_error(Hbc::CaskUnreadableError, /does not contain a cask/)
end
end
context "when the file calls a non-existent method" do
let(:path) {
(mktmpdir/"cask.rb").tap do |path|
path.write <<~RUBY
this_method_does_not_exist
RUBY
end
}
it "raises an error" do
expect {
described_class.new(path).load
}.to raise_error(Hbc::CaskUnreadableError, /undefined local variable or method/)
end
end
end
end

View File

@ -46,7 +46,7 @@ describe Hbc::DSL, :cask do
let(:token) { "invalid/invalid-header-format" }
it "raises an error" do
expect { cask }.to raise_error(SyntaxError)
expect { cask }.to raise_error(Hbc::CaskUnreadableError)
end
end