require ‘thor/rails’

module ::RailsDaemons

class Daemon < Thor
  include Thor::Rails
  namespace :daemon

  no_commands do
    def get_daemon( name )
      RailsDaemons.qualified_const_get( name.camelize )
    rescue NameError => e
      puts "Unknown daemon '#{name}'"
    end
  end

  desc "start <worker_name>", "Start background worker"
  def start( name )
    daemon = get_daemon( name )
    return if daemon.nil?
    daemon.new.daemonize
  end

  desc "restart <worker_name>", "Restart background worker (alias for start command)"
  def restart( name )
    invoke :start, [ name ]
  end

  desc "stop <worker_name>", "Stop background worker"
  def stop( name )
    get_daemon( name ).stop
  end
end

end