class PuppetForgeServer::Backends::Directory

Attributes

PRIORITY[R]

Public Class Methods

new(url, readonly = false) click to toggle source
# File lib/puppet_forge_server/backends/directory.rb, line 27
def initialize(url, readonly = false)
  @module_dir = url
  @log = PuppetForgeServer::Logger.get
  @readonly = readonly
end

Public Instance Methods

get_file_buffer(relative_path) click to toggle source
# File lib/puppet_forge_server/backends/directory.rb, line 42
def get_file_buffer(relative_path)
  path = Dir["#{@module_dir}/**/#{relative_path}"].first
  File.open(path, 'r') if path
end
get_metadata(author, name, options = {}) click to toggle source
# File lib/puppet_forge_server/backends/directory.rb, line 37
def get_metadata(author, name, options = {})
  version = options[:version] ? options[:version] : '*'
  get_modules("#{author}-#{name}-#{version}.tar.gz", options)
end
query_metadata(query, options = {}) click to toggle source
# File lib/puppet_forge_server/backends/directory.rb, line 33
def query_metadata(query, options = {})
  get_modules("*#{query}*.tar.gz", options)
end
upload(file_data) click to toggle source
# File lib/puppet_forge_server/backends/directory.rb, line 47
def upload(file_data)
  return false if @readonly
  filename = File.join(@module_dir, file_data[:filename])
  return false if File.exist?(filename)
  File.open(filename, 'w') do |f|
    f.write(file_data[:tempfile].read)
  end
  true
end

Private Instance Methods

get_modules(file_name, options) click to toggle source
# File lib/puppet_forge_server/backends/directory.rb, line 84
def get_modules(file_name, options)
   options = ({:with_checksum => true}).merge(options)
   modules = []
   Dir["#{@module_dir}/**/#{file_name}"].each do |path|
     metadata_raw, readme = read_module_data(path)
     if metadata_raw
       modules <<
         PuppetForgeServer::Models::Module.new({
         :metadata => parse_dependencies(PuppetForgeServer::Models::Metadata.new(normalize_metadata(metadata_raw))),
         :checksum => options[:with_checksum] == true ? Digest::MD5.file(path).hexdigest : nil,
         :path => "/#{File.basename(path)}",
         :private => ! @readonly,
         :readme => readme
       })
     else
       @log.error "Failed reading metadata from #{path}"
     end
   end
   modules
 end
normalize_metadata(metadata) click to toggle source
# File lib/puppet_forge_server/backends/directory.rb, line 72
def normalize_metadata(metadata)
  metadata['name'] = metadata['name'].gsub('/', '-')
  metadata
end
parse_dependencies(metadata) click to toggle source
# File lib/puppet_forge_server/backends/directory.rb, line 77
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
read_module_data(archive_path) click to toggle source
# File lib/puppet_forge_server/backends/directory.rb, line 58
def read_module_data(archive_path)
  file_contents = read_from_archive(archive_path, %r[^([^/]+/)?(metadata\.json|README\.md)$])
  metadata = JSON.parse(file_contents.find {|key, value| key =~ /metadata\.json/}[1])
  begin
    readme = file_contents.find {|key, value| key =~ /README\.md/}[1]
  rescue
    readme = nil
  end
  [metadata, readme]
rescue => error
  warn "Error reading from module archive #{archive_path}: #{error}"
  return nil
end