lib/adhearsion/cli_commands.rb in adhearsion-2.3.5 vs lib/adhearsion/cli_commands.rb in adhearsion-2.4.0.beta1
- old
+ new
@@ -20,170 +20,10 @@
end
end
module Adhearsion
module CLI
- class AhnCommand < Thor
- map %w(-h --h -help --help) => :help
- map %w(-v --v -version --version) => :version
- map %w(-) => :start
-
- check_unknown_options!
-
- def self.exit_on_failure?
- true
- end
-
- desc "create /path/to/directory", "Create a new Adhearsion application under the given path"
- def create(path)
- require 'adhearsion/generators/app/app_generator'
- Generators::AppGenerator.start
- end
-
- desc "generate [generator_name] arguments", Generators.help
- def generate(generator_name = nil, *args)
- if generator_name
- Generators.invoke generator_name
- else
- help 'generate'
- end
- end
-
- desc "version", "Shows Adhearsion version"
- def version
- say "Adhearsion v#{Adhearsion::VERSION}"
- exit 0
- end
-
- desc "start </path/to/directory>", "Start the Adhearsion server in the foreground with a console"
- def start(path = nil)
- start_app path, :console
- end
-
- desc "daemon </path/to/directory>", "Start the Adhearsion server in the background"
- method_option :pidfile, :type => :string, :aliases => %w(--pid-file)
- def daemon(path = nil)
- start_app path, :daemon, options[:pidfile]
- end
-
- desc "stop </path/to/directory>", "Stop a running Adhearsion server"
- method_option :pidfile, :type => :string, :aliases => %w(--pid-file)
- def stop(path = nil)
- execute_from_app_dir! path
-
- pid_file = if options[:pidfile]
- File.exists?(File.expand_path(options[:pidfile])) ?
- options[:pidfile] :
- File.join(path, options[:pidfile])
- else
- path = Dir.pwd
- File.join path, Adhearsion::Initializer::DEFAULT_PID_FILE_NAME
- end
- pid_file = File.expand_path pid_file
-
- begin
- pid = File.read(pid_file).to_i
- rescue
- raise PIDReadError, pid_file
- end
-
- raise PIDReadError, pid_file if pid.nil?
-
- say "Stopping Adhearsion server at #{path} with pid #{pid}"
- waiting_timeout = Time.now + 15
- begin
- ::Process.kill "TERM", pid
- sleep 0.25 while process_exists?(pid) && Time.now < waiting_timeout
- ::Process.kill "KILL", pid
- rescue Errno::ESRCH
- end
-
- File.delete pid_file if File.exists? pid_file
- end
-
- desc "restart </path/to/directory>", "Restart the Adhearsion server"
- method_option :pidfile, :type => :string, :aliases => %w(--pid-file)
- def restart(path = nil)
- execute_from_app_dir! path
- begin
- invoke :stop
- rescue PIDReadError => e
- puts e.message
- end
- invoke :daemon
- end
-
- protected
-
- def start_app(path, mode, pid_file = nil)
- execute_from_app_dir! path
- say "Starting Adhearsion server at #{Dir.pwd}"
- Adhearsion::Initializer.start :mode => mode, :pid_file => pid_file
- end
-
- def execute_from_app_dir!(path)
- return if in_app? and running_script_ahn?
-
- path ||= Dir.pwd if in_app?
-
- raise PathRequired, ARGV[0] if path.nil? or path.empty?
- raise PathInvalid, path unless ScriptAhnLoader.in_ahn_application?(path)
-
- Dir.chdir path do
- args = ARGV.dup
- args[1] = File.expand_path path
- ScriptAhnLoader.exec_script_ahn! args
- end
- end
-
- def running_script_ahn?
- $0.to_s == "script/ahn"
- end
-
- def in_app?
- ScriptAhnLoader.in_ahn_application? or ScriptAhnLoader.in_ahn_application_subdirectory?
- end
-
- def process_exists?(pid = nil)
- # FIXME: Raise some error here
- return false if pid.nil?
- `ps -p #{pid} | sed -e '1d'`.strip.empty?
- end
-
- def method_missing(action, *args)
- help
- raise UnknownCommand, [action, *args] * " "
- end
- end # AhnCommand
-
- class UnknownCommand < Thor::Error
- def initialize(cmd)
- super "Unknown command: #{cmd}"
- end
- end
-
- class PathRequired < Thor::Error
- def initialize(cmd)
- super "A valid path is required for #{cmd}, unless run from an Adhearson app directory"
- end
- end
-
- class UnknownGeneratorError < Thor::Error
- def initialize(gentype)
- puts "Please specify generator to use (#{Adhearsion::Generators.mappings.keys.join(", ")})"
- super "Unknown command: #{gentype}"
- end
- end
-
- class PathInvalid < Thor::Error
- def initialize(path)
- super "Directory #{path} does not belong to an Adhearsion project!"
- end
- end
-
- class PIDReadError < Thor::Error
- def initialize(path)
- super "Could not read pid from the file #{path}"
- end
- end
+ require 'adhearsion/cli_commands/plugin_command'
+ require 'adhearsion/cli_commands/ahn_command'
+ require 'adhearsion/cli_commands/thor_errors'
end
end