Class: ChefZero::Endpoints::CookbooksBase
- Defined in:
- lib/chef_zero/endpoints/cookbooks_base.rb
Overview
Common code for endpoints that return cookbook lists
Direct Known Subclasses
CookbookEndpoint, CookbooksEndpoint, EnvironmentCookbookEndpoint, EnvironmentCookbooksEndpoint, EnvironmentRecipesEndpoint, EnvironmentRoleEndpoint, UniverseEndpoint
Constant Summary
Constants inherited from RestBase
RestBase::DEFAULT_REQUEST_VERSION, RestBase::DEFAULT_RESPONSE_VERSION
Instance Attribute Summary
Attributes inherited from RestBase
Instance Method Summary collapse
- #all_cookbooks_list(request) ⇒ Object
- #filter_cookbooks(cookbooks_list, constraints = {}, num_versions = nil) ⇒ Object
- #format_cookbooks_list(request, cookbooks_list, constraints = {}, num_versions = nil) ⇒ Object
- #format_universe_list(request, cookbooks_list) ⇒ Object
- #recipe_names(cookbook_name, cookbook) ⇒ Object
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 |