class Marv::Server::Actions

Public Class Methods

new(server, debug=false) click to toggle source

Initialize actions

# File lib/marv/server/actions.rb, line 9
def initialize(server, debug=false)
  @server = server
  @task = server.task
  @path = server.path
  @name = server.name
  @debug = debug
end

Public Instance Methods

abort_noexist() click to toggle source

Abort if not exists

# File lib/marv/server/actions.rb, line 106
def abort_noexist
  unless @server.exists?
    @task.say_error("Server #{@name} does not exist!")
    abort
  end
end
abort_noexist_cmd(exec_name, text=nil) click to toggle source

Abort if command does no exist

# File lib/marv/server/actions.rb, line 114
def abort_noexist_cmd(exec_name, text=nil)
  unless @task.exec_exixts?(exec_name)
    text ||= exec_name.upcase

    @task.say_error("#{text} is not installed on your system!")
    abort
  end
end
change_server_port() click to toggle source

Change server port

# File lib/marv/server/actions.rb, line 135
def change_server_port
  @task.say_info "Use another port to run the server.", true
  port = @task.ask_input "Which port would you like to use?"

  # Check if port available
  if is_port_available?(@server.host, port)
    # Write port to server config
    @task.shell.mute do
      @task.gsub_file @server.config_file, "#{@server.port}", "#{port}"
    end

    @server.port = port
  else
    change_server_port
  end
end
is_port_available?(host=@server.host, port=@server.port) click to toggle source

Check if port is available

# File lib/marv/server/actions.rb, line 169
def is_port_available?(host=@server.host, port=@server.port)
  begin
    url = URI.parse("http://#{host}:#{port}/")
    req = Net::HTTP.new(url.host, url.port)
    req.request_head(url)

    return false
  rescue
    return true
  end
end
is_server_running?(server=@server) click to toggle source

Check if port is available

# File lib/marv/server/actions.rb, line 153
def is_server_running?(server=@server)
  begin
    pid_file = ::File.join(server.path, 'php.pid')

    if ::File.exists?(pid_file)
      pid = ::File.read(pid_file).to_i
      return ::Process.kill(0, pid) == 1
    end

    return false
  rescue
    return false
  end
end
remove() click to toggle source

Remove server

# File lib/marv/server/actions.rb, line 58
def remove
  abort_noexist
  @task.say_warning("This will remove server #{@name} and all data will be lost.")

  if @task.said_yes?("Are you sure you want to remove server?")
    begin
      @server.remove_database

      @task.shell.mute do
        stop(false)
        remove_hotel_server
        @task.remove_dir @path
      end
    rescue Exception => e
      @task.say_error "Error while removing server:", e.message
      abort
    end

    @task.say_success "Server successfully removed.", false, true
  end
end
remove_hotel_server() click to toggle source

Remove hotel server if it exists

# File lib/marv/server/actions.rb, line 124
def remove_hotel_server
  if @task.exec_exixts?('hotel')
    begin
      `cd #{@path} && hotel rm`
    rescue ExceptionName
      return true
    end
  end
end
restart() click to toggle source

Initialize server restart

# File lib/marv/server/actions.rb, line 50
def restart
  stop(false)
  @task.say_info "Restarting server #{@name}...", true
  sleep 3
  start
end
run_server(from_command=true) click to toggle source

Run server

# File lib/marv/server/actions.rb, line 81
def run_server(from_command=true)
  abort_noexist_cmd('php')
  ::Dir.chdir @path

  unless @debug
    @php = ChildProcess.build 'php', '-S', "#{@server.host}:#{@server.port}", 'router.php'
    @php.start

    # Write PHP proccess id to file
    @task.shell.mute do
      @task.create_file ::File.join(@path, 'php.pid'), @php.pid, :force => true
    end
  end

  @task.say_success "Server #{@server.name} is running.", false, !from_command
  @task.say_message "✔ http://#{@server.host}:#{@server.port}", false, false

  # Start server in debug mode
  if @debug
    @task.say_empty
    system "php -S #{@server.host}:#{@server.port} router.php"
  end
end
start(from_command=true) click to toggle source

Initialize server start

# File lib/marv/server/actions.rb, line 18
def start(from_command=true)
  if is_server_running?
    @task.say_warning "Server is already running.", false
    abort
  end

  unless is_port_available?(@server.host, @server.port)
    @task.say_warning "Port is not available!", false, true
    change_server_port
  end

  run_server(from_command)
end
stop(message=true) click to toggle source

Initialize server stop

# File lib/marv/server/actions.rb, line 33
def stop(message=true)
  abort_noexist
  pid_file = ::File.join(@path, 'php.pid')

  begin
    if ::File.exists?(pid_file)
      pid = ::File.read(pid_file).to_i

      ::Process.kill('KILL', pid)
      @task.say_warning("Server #{@name} stopped.", false) if message
    end
  rescue
    @task.say_warning("Server #{@name} is not running.", false) if message
  end
end