class PuppetForgeServer::Backends::ProxyV3

Attributes

PRIORITY[R]

Public Class Methods

new(url, cache_dir, http_client = PuppetForgeServer::Http::HttpClient.new) click to toggle source
Calls superclass method PuppetForgeServer::Backends::Proxy::new
# File lib/puppet_forge_server/backends/proxy_v3.rb, line 25
def initialize(url, cache_dir, http_client = PuppetForgeServer::Http::HttpClient.new)
  super(url, cache_dir, http_client, @@FILE_PATH)
end

Public Instance Methods

get_metadata(author, name, options = {}) click to toggle source
# File lib/puppet_forge_server/backends/proxy_v3.rb, line 29
def get_metadata(author, name, options = {})
  query ="#{author}-#{name}"
  begin
    releases = get_releases(query, options)
    get_modules(releases)
  rescue => e
    @log.error("#{self.class.name} failed querying metadata for '#{query}' with options #{options}")
    @log.error("Error: #{e}")
    return nil
  end
end
query_metadata(query, options = {}) click to toggle source
# File lib/puppet_forge_server/backends/proxy_v3.rb, line 41
def query_metadata(query, options = {})
  begin
    releases = get_all_result_pages("/v3/modules?query=#{query}").map {|element| element['current_release']}
    get_modules(releases)
  rescue => e
    @log.error("#{self.class.name} failed querying metadata for '#{query}' with options #{options}")
    @log.error("Error: #{e}")
    return nil
  end
end

Private Instance Methods

get_all_result_pages(next_page) click to toggle source
# File lib/puppet_forge_server/backends/proxy_v3.rb, line 66
def get_all_result_pages(next_page)
  results = []
  begin
    current_page = JSON.parse(get(next_page))
    results += current_page['results']
    next_page = current_page['pagination']['next']
  end while next_page
  results
end
get_modules(releases) click to toggle source
# File lib/puppet_forge_server/backends/proxy_v3.rb, line 88
def get_modules(releases)
  releases.map do |element|
    PuppetForgeServer::Models::Module.new({
      :metadata => parse_dependencies(PuppetForgeServer::Models::Metadata.new(normalize_metadata(element['metadata']))),
      :checksum => element['file_md5'],
      :path => element['file_uri'].gsub(/^#{@@FILE_PATH}/, ''),
      :tags => (element['tags'] + (element['metadata']['tags'] ? element['metadata']['tags'] : [])).flatten.uniq,
      :deleted_at => element['deleted_at'],
      :readme => element['readme']
    })
  end
end
get_releases(query, options = {}) click to toggle source
# File lib/puppet_forge_server/backends/proxy_v3.rb, line 54
def get_releases(query, options = {})
  version = options[:version]
  unless version.nil?
    url = "/v3/releases/#{query}-#{version}"
    buffer = get_non_mutable(url)
    release = JSON.parse(buffer)
    [ release ]
  else
    get_all_result_pages("/v3/releases?module=#{query}")
  end
end
normalize_metadata(metadata) click to toggle source
# File lib/puppet_forge_server/backends/proxy_v3.rb, line 76
def normalize_metadata(metadata)
  metadata['name'] = metadata['name'].gsub('/', '-')
  metadata
end
parse_dependencies(metadata) click to toggle source
# File lib/puppet_forge_server/backends/proxy_v3.rb, line 81
def parse_dependencies(metadata)
  metadata.dependencies = metadata.dependencies.dup.map do |dependency|
    PuppetForgeServer::Models::Dependency.new({:name => dependency['name'], :version_requirement => dependency['version_requirement']})
  end.flatten
  metadata
end