class ChefSpec::Berkshelf

Public Class Methods

new() click to toggle source
# File lib/chefspec/berkshelf.rb, line 16
def initialize
  @tmpdir = Dir.mktmpdir
end

Public Instance Methods

setup!() click to toggle source

Setup and install the necessary dependencies in the temporary directory.

# File lib/chefspec/berkshelf.rb, line 23
def setup!
  # Get the list of Berkshelf options
  opts = RSpec.configuration.berkshelf_options
  unless opts.is_a?(Hash)
    raise InvalidBerkshelfOptions(value: opts.inspect)
  end

  berksfile = ::Berkshelf::Berksfile.from_options(opts)

  # Grab a handle to tmpdir, since Berkshelf 2 modifies it a bit
  tmpdir = File.join(@tmpdir, "cookbooks")

  ::Berkshelf.ui.mute do
    if ::Berkshelf::Berksfile.method_defined?(:vendor)
      # Berkshelf 3.0 requires the directory to not exist
      FileUtils.rm_rf(tmpdir)
      berksfile.vendor(tmpdir)
    else
      berksfile.install(path: tmpdir)
    end
  end

  filter = Coverage::BerkshelfFilter.new(berksfile)
  Coverage.add_filter(filter)

  ::RSpec.configure { |config| config.cookbook_path = tmpdir }
end
teardown!() click to toggle source

Destroy the installed Berkshelf at the temporary directory.

# File lib/chefspec/berkshelf.rb, line 54
def teardown!
  FileUtils.rm_rf(@tmpdir) if File.exist?(@tmpdir)
end