class MacSetup::ServicesInstaller

Constants

LAUNCH_AGENTS_PATH
SERVICES_TAP

Attributes

config[R]
running_services[R]
services[R]
status[R]

Public Class Methods

new(config, status) click to toggle source
# File lib/mac_setup/services_installer.rb, line 16
def initialize(config, status)
  @config = config
  @status = status
  @services = config.services
end
run(config, status) click to toggle source
# File lib/mac_setup/services_installer.rb, line 12
def self.run(config, status)
  new(config, status).run
end

Public Instance Methods

run() click to toggle source
# File lib/mac_setup/services_installer.rb, line 22
def run
  return if services.none?

  MacSetup.log "Installing services..."

  FileUtils.mkdir_p(LAUNCH_AGENTS_PATH)
  tap_services
  get_running_services

  services.each { |service| install_service(service) }
end

Private Instance Methods

get_running_services() click to toggle source
# File lib/mac_setup/services_installer.rb, line 36
def get_running_services
  services_list = Shell.run("brew services list").split("\n").drop(1)
  services_with_status = services_list.map { |line| line.split(/\s+/, 3).take(2) }

  @running_services = services_with_status.each_with_object([]) do |(service, status), services|
    services << service if status == "started"
  end
end
install_service(service) click to toggle source
# File lib/mac_setup/services_installer.rb, line 45
def install_service(service)
  if running_services.include?(service)
    MacSetup.log "Restarting #{service} service..."

    Shell.run("brew services restart #{service}")
  else
    MacSetup.log "Installing #{service} service..."

    Shell.run("brew services start #{service}")
  end
end
services_already_tapped?() click to toggle source
# File lib/mac_setup/services_installer.rb, line 63
def services_already_tapped?
  status.installed_taps.include?(SERVICES_TAP)
end
tap_services() click to toggle source
# File lib/mac_setup/services_installer.rb, line 57
def tap_services
  return if services_already_tapped?

  Shell.run("brew tap #{SERVICES_TAP}")
end