# File lib/automateit/package_manager.rb, line 124
  def _install_helper(*packages, &block) # :yields: filtered_packages, opts
    _raise_unless_available

    packages, opts = args_and_opts(*packages)
    packages = _list_normalizer(packages)

    check_packages = \
      case packages
      when Hash
        packages.keys
      else 
        packages
      end

    missing = not_installed?(check_packages, :details => true)[1]
    return false if missing.blank?

    install_packages = \
      case packages
      when Hash
        missing.map{|t| packages[t]}
      else 
        missing
      end
    block.call(install_packages, opts)

    return true if preview?
    unless (failed = not_installed?(check_packages, :details => true)[1]).empty?
      raise ArgumentError.new("Couldn't install: #{failed.join(' ')}")
    else
      return true
    end
  end