schultyy/Niman

View on GitHub
lib/niman/installer.rb

Summary

Maintainability
A
25 mins
Test Coverage
require 'virtus'
require 'niman/exceptions'
require 'niman/package_resolver'
require 'niman/package_manager'

module Niman
  class Installer
    include Virtus.model

    attribute :package_manager, Niman::PackageManager

    def install(packages)
      Array(packages).each do |package|
        self.install_package(package)
      end
    end

    def install_package(package)
      return unless package.installable?
      shell = package_manager.shell
      if package.respond_to?(:package_names)
        package_name = package.package_names.fetch(shell.os.to_sym) { raise Niman::InstallError, "Package has no support for #{shell.os}" }
      elsif package.respond_to?(:name)
        package_name = package.name
      end
      unless package_manager.installed?(package_name)
        package_manager.install(package_name)
      end
    end
  end
end