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:
		
						commit
						3c3b05d457
					
				@ -17,7 +17,11 @@ module Hbc
 | 
			
		||||
      return to_enum unless block_given?
 | 
			
		||||
 | 
			
		||||
      Tap.flat_map(&:cask_files).each do |f|
 | 
			
		||||
        begin
 | 
			
		||||
          yield CaskLoader::FromTapPathLoader.new(f).load
 | 
			
		||||
        rescue CaskUnreadableError => e
 | 
			
		||||
          opoo e.message
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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.)
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user