Class: ChefZero::Endpoints::CookbooksBase

Inherits:
RestBase
  • Object
show all
Defined in:
lib/chef_zero/endpoints/cookbooks_base.rb

Overview

Common code for endpoints that return cookbook lists

Constant Summary

Constants inherited from RestBase

RestBase::DEFAULT_REQUEST_VERSION, RestBase::DEFAULT_RESPONSE_VERSION

Instance Attribute Summary

Attributes inherited from RestBase

#server

Instance Method Summary collapse

Methods inherited from RestBase

#accepts?, #already_json_response, #build_uri, build_uri, #call, #check_api_version, #create_data, #create_data_dir, #data_store, #delete_data, #delete_data_dir, #error, #exists_data?, #exists_data_dir?, #get_data, #get_data_or_else, #hashify_list, #head_request, #initialize, #json_only, #json_response, #list_data, #list_data_or_else, #parse_json, #policy_name_invalid?, #populate_defaults, rfc2396_parser, #set_data, #text_response, #to_json

Constructor Details

This class inherits a constructor from ChefZero::RestBase

Instance Method Details

#all_cookbooks_list(request) ⇒ Object



42
43
44
45
46
47
48
49
# File 'lib/chef_zero/endpoints/cookbooks_base.rb', line 42

def all_cookbooks_list(request)
  result = {}
  # Race conditions exist here (if someone deletes while listing).  I don't care.
  data_store.list(request.rest_path[0..1] + ["cookbooks"]).each do |name|
    result[name] = data_store.list(request.rest_path[0..1] + ["cookbooks", name])
  end
  result
end

#filter_cookbooks(cookbooks_list, constraints = {}, num_versions = nil) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/chef_zero/endpoints/cookbooks_base.rb', line 51

def filter_cookbooks(cookbooks_list, constraints = {}, num_versions = nil)
  cookbooks_list.keys.sort.each do |name|
    constraint = Gem::Requirement.new(constraints[name])
    versions = []
    cookbooks_list[name].sort_by { |version| Gem::Version.new(version.dup) }.reverse_each do |version|
      break if num_versions && versions.size >= num_versions

      if constraint.satisfied_by?(Gem::Version.new(version.dup))
        versions << version
      end
    end
    yield [name, versions]
  end
end

#format_cookbooks_list(request, cookbooks_list, constraints = {}, num_versions = nil) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/chef_zero/endpoints/cookbooks_base.rb', line 9

def format_cookbooks_list(request, cookbooks_list, constraints = {}, num_versions = nil)
  results = {}
  filter_cookbooks(cookbooks_list, constraints, num_versions) do |name, versions|
    versions_list = versions.map do |version|
      {
        "url" => build_uri(request.base_uri, request.rest_path[0..1] + ["cookbooks", name, version]),
        "version" => version,
      }
    end
    results[name] = {
      "url" => build_uri(request.base_uri, request.rest_path[0..1] + ["cookbooks", name]),
      "versions" => versions_list,
    }
  end
  results
end

#format_universe_list(request, cookbooks_list) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/chef_zero/endpoints/cookbooks_base.rb', line 26

def format_universe_list(request, cookbooks_list)
  results = {}
  cookbooks_list.each do |name, versions|
    results[name] ||= {}
    versions.each do |version|
      cookbook_data = FFI_Yajl::Parser.parse(get_data(request, request.rest_path[0..1] + [ "cookbooks", name, version ], :nil))
      results[name][version] ||= {
        "dependencies" => cookbook_data["metadata"]["dependencies"],
        "location_path" => build_uri(request.base_uri, request.rest_path[0..1] + ["cookbooks", name, version]),
        "location_type" => "chef_server",
      }
    end
  end
  results
end

#recipe_names(cookbook_name, cookbook) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/chef_zero/endpoints/cookbooks_base.rb', line 66

def recipe_names(cookbook_name, cookbook)
  cookbook["all_files"].inject([]) do |acc, file|
    part, name = file["name"].split("/")
    next acc unless part == "recipes" || File.extname(name) != ".rb"

    if name == "default.rb"
      acc << cookbook_name
    else
      acc << "#{cookbook_name}::#{File.basename(name, ".rb")}"
    end
  end
end