class PuppetForgeServer::Backends::ProxyV1

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_v1.rb, line 27
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_v1.rb, line 31
def get_metadata(author, name, options = {})
  options = ({:with_checksum => true}).merge(options)
  query ="#{author}/#{name}"
  begin
    get_modules(JSON.parse(get("/modules.json?q=#{query}")).select { |e| e['full_name'].match("#{query}") }, options)
  rescue => e
    @log.debug("#{self.class.name} failed querying metadata for '#{query}' with options #{options}")
    @log.debug("Error: #{e}")
    return nil
  end
end
query_metadata(query, options = {}) click to toggle source
# File lib/puppet_forge_server/backends/proxy_v1.rb, line 43
def query_metadata(query, options = {})
  options = ({:with_checksum => true}).merge(options)
  begin
    get_modules(JSON.parse(get("/modules.json?q=#{query}")).select { |e| e['full_name'].match("*#{query}*") }, options)
  rescue => e
    @log.debug("#{self.class.name} failed querying metadata for '#{query}' with options #{options}")
    @log.debug("Error: #{e}")
    return nil
  end
end

Private Instance Methods

get_modules(modules, options) click to toggle source
# File lib/puppet_forge_server/backends/proxy_v1.rb, line 72
def get_modules(modules, options)
  modules.map do |element|
    version = options['version'] ? "&version=#{options['version']}" : ''
    JSON.parse(get("/api/v1/releases.json?module=#{element['author']}/#{element['name']}#{version}")).values.first.map do |release|
      tags = element['tag_list'] ? element['tag_list'] : nil
      raw_metadata = read_metadata(element, release)
      PuppetForgeServer::Models::Module.new({
        :metadata => parse_dependencies(PuppetForgeServer::Models::Metadata.new(raw_metadata)),
        :checksum => options[:with_checksum] ? Digest::MD5.hexdigest(File.read(get_file_buffer(release['file']))) : nil,
        :path => "#{release['file']}".gsub(/^#{@@FILE_PATH}/, ''),
        :tags => tags
      })
    end
  end
end
parse_dependencies(metadata) click to toggle source
# File lib/puppet_forge_server/backends/proxy_v1.rb, line 65
def parse_dependencies(metadata)
  metadata.dependencies = metadata.dependencies.dup.map do |dependency|
    PuppetForgeServer::Models::Dependency.new({:name => dependency[0], :version_requirement => dependency.length > 1 ? dependency[1] : nil})
  end.flatten
  metadata
end
read_metadata(element, release) click to toggle source
# File lib/puppet_forge_server/backends/proxy_v1.rb, line 55
def read_metadata(element, release)
  element['project_page'] = element['project_url']
  element['name'] = element['full_name'] ? element['full_name'].gsub('/', '-') : element['name']
  element['description'] = element['desc']
  element['version'] = release['version'] ? release['version'] : element['version']
  element['dependencies'] = release['dependencies'] ? release['dependencies'] : []
  %w(project_url full_name releases tag_list desc).each { |key| element.delete(key) }
  element
end