class ChefCLI::Policyfile::ArtifactoryCookbookSource

def ==(other)

def ==(other)
  other.is_a?(self.class) && other.uri == uri && other.preferred_cookbooks == preferred_cookbooks
end

def default_source_args

def default_source_args
  [:artifactory, uri]
end

def desc

def desc
  "artifactory(#{uri})"
end

def full_community_graph

def full_community_graph
  @full_community_graph ||=
    begin
      graph_json = http_connection_for(uri).get("/universe")
      JSON.parse(graph_json)
    end
end

def http_connection_for(base_url)

def http_connection_for(base_url)
  headers = { "X-Jfrog-Art-API" => chef_config.artifactory_api_key || ENV["ARTIFACTORY_API_KEY"] }
  @http_connections[base_url] ||= Chef::HTTP::Simple.new(base_url, headers: headers)
end

def initialize(uri, chef_config: nil)

def initialize(uri, chef_config: nil)
  @uri = uri
  @http_connections = {}
  @chef_config = chef_config
  @preferred_cookbooks = []
  yield self if block_given?
end

def null?

def null?
  false
end

def preferred_for(*cookbook_names)

def preferred_for(*cookbook_names)
  preferred_cookbooks.concat(cookbook_names)
end

def preferred_source_for?(cookbook_name)

def preferred_source_for?(cookbook_name)
  preferred_cookbooks.include?(cookbook_name)
end

def source_options_for(cookbook_name, cookbook_version)

def source_options_for(cookbook_name, cookbook_version)
  base_uri = full_community_graph[cookbook_name][cookbook_version]["download_url"]
  {
    artifactory: base_uri,
    version: cookbook_version,
    http_client: http_connection_for(base_uri.to_s),
  }
end

def universe_graph

def universe_graph
  @universe_graph ||= begin
    full_community_graph.inject({}) do |normalized_graph, (cookbook_name, metadata_by_version)|
      normalized_graph[cookbook_name] = metadata_by_version.inject({}) do |deps_by_version, (version, metadata)|
        deps_by_version[version] = metadata["dependencies"]
        deps_by_version
      end
      normalized_graph
    end
  end
end