class Chef::Handler::Serverspec

Serverspec handler

Attributes

config[R]

Public Class Methods

new(config = {}) click to toggle source
# File lib/chef/handler/serverspec.rb, line 14
def initialize(config = {})
  @config = Mash.new(config)
  @config[:output_dir] ||= '/tmp/serverspec'
  @config
end

Public Instance Methods

build_output_dir(name) click to toggle source
# File lib/chef/handler/serverspec.rb, line 37
def build_output_dir(name)
  unless File.exist?(name)
    FileUtils.mkdir_p(name)
    File.chmod(00700, name)
  end
end
report() click to toggle source
# File lib/chef/handler/serverspec.rb, line 20
def report
  resource_tree.each do |cookbook, recipes|
    recipes.each do |recipe, resources|
      spec_dir = File.join(@config[:output_dir], cookbook)
      build_output_dir(spec_dir)

      File.open(File.join(spec_dir, "#{recipe}_spec.rb"), 'w') do |file|
        file.write("context 'recipe[#{cookbook}::#{recipe}]' do\n")
        resources.each do |r|
          file.write(r.to_serverspec)
        end
        file.write("end\n")
      end
    end
  end
end
resource_tree() click to toggle source
# File lib/chef/handler/serverspec.rb, line 44
def resource_tree
  resources = Hash.new { |h, k| h[k] = Hash.new { |h, k| h[k] = [] } }

  all_resources.each do |r|
    resources[r.cookbook_name || 'none'][r.recipe_name || 'none'] << r
  end

  resources
end