Class: Chef::Cookbook::ManifestV0

Inherits:
Object
  • Object
show all
Extended by:
Mixin::VersionedAPI
Defined in:
lib/chef/cookbook/manifest_v0.rb

Constant Summary collapse

COOKBOOK_SEGMENTS =
%w{ resources providers recipes definitions libraries attributes files templates root_files }

Class Method Summary collapse

Methods included from Mixin::VersionedAPI

minimum_api_version

Class Method Details

.from_hash(hash) ⇒ Object


29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/chef/cookbook/manifest_v0.rb', line 29

def self.from_hash(hash)
  response = Mash.new(hash)
  response[:all_files] = COOKBOOK_SEGMENTS.inject([]) do |memo, segment|
    next memo if hash[segment].nil? || hash[segment].empty?
    hash[segment].each do |file|
      file["name"] = "#{segment}/#{file["name"]}" unless segment == "root_files"
      memo << file
    end
    response.delete(segment)
    memo
  end
  response
end

.to_hash(manifest) ⇒ Object


43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/chef/cookbook/manifest_v0.rb', line 43

def self.to_hash(manifest)
  result = manifest.manifest.dup
  result.delete("all_files")

  files = manifest.by_parent_directory
  files.keys.each_with_object(result) do |parent, memo|
    if COOKBOOK_SEGMENTS.include?(parent)
      memo[parent] ||= []
      files[parent].each do |file|
        file["name"] = file["name"].split("/")[1] unless parent == "root_files"
        file.delete("full_path")
        memo[parent] << file
      end
    end
  end
  # Ensure all segments are set to [] if they don't exist.
  # See https://github.com/chef/chef/issues/6044
  COOKBOOK_SEGMENTS.each do |segment|
    result[segment] ||= []
  end

  result.merge({ "frozen?" => manifest.frozen_version?, "chef_type" => "cookbook_version" })
end