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