Sha256: e2120b99182d2df4b0094c5fcbe817c5a37875c7a36fb8b60663fca8e396150f

Contents?: true

Size: 1.25 KB

Versions: 2

Compression:

Stored size: 1.25 KB

Contents

require_relative 'base'

module VagrantPlugins
  module Berkshelf
    module Action
      class Check < Base
        BERKS_REQUIREMENT = "~> 3.2"

        def call(env)
          check_berks_bin!(env)
          berkshelf_version_check!(env)

          @app.call(env)
        end

        # Check that the Berkshelf `berks` bin is in the PATH.
        # @raise [BerkshelfNotFound]
        def check_berks_bin!(env)
          if berks_bin.nil?
            raise BerkshelfNotFound
          end
        end

        # Check that the installed version of Berkshelf is valid for this
        # version of Vagrant Berkshelf.
        # @raise [InvalidBerkshelfVersionError]
        def berkshelf_version_check!(env)
          result = berks("--version", "--format", "json")

          begin
            json = JSON.parse(result.stdout, symbolize_names: true)
            version = Gem::Version.new(json[:version])

            unless Gem::Requirement.new(BERKS_REQUIREMENT).satisfied_by?(version)
              raise InvalidBerkshelfVersionError.new(berks_bin, BERKS_REQUIREMENT, version)
            end
          rescue JSON::ParserError
            raise InvalidBerkshelfVersionError.new(berks_bin, BERKS_REQUIREMENT, version)
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
vagrant-berkshelf-4.0.1 lib/vagrant-berkshelf/action/check.rb
vagrant-berkshelf-4.0.0 lib/vagrant-berkshelf/action/check.rb