class Puppet::Forge::ModuleRelease

Attributes

install_dir[R]
metadata[R]

Public Instance Methods

install(dir) click to toggle source
# File lib/puppet/forge.rb, line 144
def install(dir)
  staging_dir = self.prepare

  module_dir = dir + name[/-(.*)/, 1]
  module_dir.rmtree if module_dir.exist?

  # Make sure unpacked module has the same ownership as the folder we are moving it into.
  Puppet::ModuleTool::Applications::Unpacker.harmonize_ownership(dir, staging_dir)

  FileUtils.mv(staging_dir, module_dir)
  @install_dir = dir

  # Return the Pathname object representing the directory where the
  # module release archive was unpacked the to.
  return module_dir
ensure
  staging_dir.rmtree if staging_dir.exist?
end
prepare() click to toggle source
# File lib/puppet/forge.rb, line 163
def prepare
  return @unpacked_into if @unpacked_into

  download(@data['file_uri'], tmpfile)
  validate_checksum(tmpfile, @data['file_md5'])
  unpack(tmpfile, tmpdir)

  @unpacked_into = Pathname.new(tmpdir)
end

Public Class Methods

new(source, data) click to toggle source
# File lib/puppet/forge.rb, line 120
def initialize(source, data)
  @data = data
  @metadata = meta = data['metadata']

  name = meta['name'].tr('/', '-')
  version = Semantic::Version.parse(meta['version'])
  release = "#{name}@#{version}"

  if meta['dependencies']
    dependencies = meta['dependencies'].collect do |dep|
      begin
        Puppet::ModuleTool::Metadata.new.add_dependency(dep['name'], dep['version_requirement'], dep['repository'])
        Puppet::ModuleTool.parse_module_dependency(release, dep)[0..1]
      rescue ArgumentError => e
        raise ArgumentError, "Malformed dependency: #{dep['name']}. Exception was: #{e}"
      end
    end
  else
    dependencies = []
  end

  super(source, name, version, Hash[dependencies])
end