class RubyAutoInstaller::CLI

Public Instance Methods

update() click to toggle source
# File lib/ruby_auto_installer/cli.rb, line 11
def update
  @verbose = options[:verbose]
  manager_name = options[:manager_name]

  if options[:manager_name].nil?
    debug "Finding manager..."
    if Managers::Asdf.present?
      debug "Found asdf version manager"
      manager_name = "asdf"
    elsif Managers::Rbenv.present?
      debug "Found rbenv version manager"
      manager_name = "rbenv"
    elsif Managers::Rvm.present?
      debug "Found rvm version manager"
      manager_name = "rvm"
    else
      raise "Failed to find a version manager"
    end
  end

  debug "Attempting to use #{manager_name} version manager"
  manager = load_manager(manager_name)

  debug "Updating #{manager_name}"
  manager.update

  debug "Currently installed versions:"
  installed = strip_lines(manager.installed_versions)
  debug installed

  debug "Available versions:"
  available = strip_lines(standard_releases_only(manager.all_versions))
  debug available

  if options[:greedy].nil?
    latest = []
    available.sort_by! { |version| Gem::Version.new(version) }
    loop do
      last = available.last
      latest << last

      available.reject! { |version| version[0..2] == last[0..2] }
      break if available.empty?
    end
    available = latest
  end

  debug "Versions to be installed:"
  install_versions = missing_releases(installed, available)

  unless options[:min_version].nil?
    install_versions.reject! { |version| version <= options[:min_version] }
  end

  debug install_versions

  install_versions.each do |version|
    if options[:dry_run]
      puts "DRY RUN: Would install #{version}"
    else
      manager.install(version)
    end
  end

  manager.refresh

  puts "All done!"
end

Private Instance Methods

debug(msg) click to toggle source
# File lib/ruby_auto_installer/cli.rb, line 106
def debug(msg)
  puts msg if @verbose
end
load_manager(name) click to toggle source
# File lib/ruby_auto_installer/cli.rb, line 94
def load_manager(name)
  manager = "RubyAutoInstaller::Managers::#{name.capitalize}".
              split("::").
              inject(Object) { |o, c| o.const_get c }

  unless manager.present?
    raise "Failed to load manager #{name}"
  end

  manager
end
missing_releases(installed, available) click to toggle source
# File lib/ruby_auto_installer/cli.rb, line 86
def missing_releases(installed, available)
  available.reject { |version| installed.include? version }
end
standard_releases_only(versions) click to toggle source
# File lib/ruby_auto_installer/cli.rb, line 82
def standard_releases_only(versions)
  versions.select { |line| line.match("^[0-9]*.[0-9]*.[0-9]*$") }
end
strip_lines(str) click to toggle source
# File lib/ruby_auto_installer/cli.rb, line 90
def strip_lines(str)
  str.map(&:strip)
end