testmycode/tmc-server

View on GitHub
lib/tasks/init.rake

Summary

Maintainability
Test Coverage
# frozen_string_literal: true

require 'ruby_init_script'
require 'etc'

namespace :background_daemon do
  namespace :init do
    DEFAULT_NAME = 'tmc-background-daemon'

    def init_script(name = nil)
      name ||= DEFAULT_NAME
      RubyInitScript.new(
        name: name,
        short_description: 'TMC background daemon',
        executable_path: 'script/background_daemon',
        user: Etc.getpwuid(File.stat(::Rails.root).uid).name
      )
    end

    desc 'Install background daemon init script. RVM-compatible. Optional arg: script name.'
    task :install, [:name] do |_t, args|
      init_script(args[:name]).install
    end

    desc 'Preview background daemon init script.'
    task :preview do
      script = init_script.script_source
      puts
      puts '-' * 80
      puts script
      puts '-' * 80
      puts
    end

    desc 'Uninstall init script. Optional arg: script name.'
    task :uninstall, :name do |_t, args|
      init_script(args[:name]).uninstall
    end

    desc 'Reinstall init script. Optional arg: script name.'
    task :reinstall, [:name] => %i[uninstall install]
  end
end

namespace :init do
  initables = %i[background_daemon]
  desc 'Installs all initscripts'
  task install: initables.map { |initable| "#{initable}:init:install" }
  desc 'Uninstalls all initscripts'
  task uninstall: initables.map { |initable| "#{initable}:init:uninstall" }
  desc 'Reinstalls all initscripts'
  task reinstall: initables.map { |initable| "#{initable}:init:reinstall" }
end