class ChefCLI::Policyfile::DeliverySupermarketSource

Fetches cookbooks from a supermarket, similar to CommunityCookbookSource (which it delegates to), except that only the latest versions of any cookbook can be used.

This is intended to be used in an environment where the team wants to make only the newest version of a given cookbook available in order to force developers to integrate continuously at the component artifact (cookbook) level. To achieve this goal, two constraints must be imposed:

In the future, alternative approaches may be pursued to achieve the goal of continuously integrating at the cookbook level without imposing those constraints.

Public Class Methods

new(uri) { |self| ... } click to toggle source
# File lib/chef-cli/policyfile/delivery_supermarket_source.rb, line 55
def initialize(uri)
  @community_source = CommunityCookbookSource.new(uri)
  yield self if block_given?
end

Public Instance Methods

==(other) click to toggle source
# File lib/chef-cli/policyfile/delivery_supermarket_source.rb, line 60
def ==(other)
  other.is_a?(self.class) && other.uri == uri
end
default_source_args() click to toggle source
# File lib/chef-cli/policyfile/delivery_supermarket_source.rb, line 64
def default_source_args
  [:delivery_supermarket, uri]
end
desc() click to toggle source
# File lib/chef-cli/policyfile/delivery_supermarket_source.rb, line 81
def desc
  "delivery_supermarket(#{uri})"
end
universe_graph() click to toggle source
# File lib/chef-cli/policyfile/delivery_supermarket_source.rb, line 68
def universe_graph
  @universe_graph ||= begin
    @community_source.universe_graph.inject({}) do |truncated, (cookbook_name, version_and_deps_list)|
      sorted_versions = version_and_deps_list.keys.sort_by do |version_string|
        Semverse::Version.new(version_string)
      end
      greatest_version = sorted_versions.last
      truncated[cookbook_name] = { greatest_version => version_and_deps_list[greatest_version] }
      truncated
    end
  end
end