class Object

Public Instance Methods

auto_ports?(default_web_port, default_db_port) click to toggle source
# File lib/commands/create.rb, line 38
def auto_ports? default_web_port, default_db_port
    puts "Auto-assigned ports"
    puts "Web: #{default_web_port}"    
    puts "Database: #{default_db_port}"
    puts

    response = ""
    while response != "y" && response != "n"
        response = ask "Use auto-assigned ports? (y/n)"
    end

    return response == "y"
end
check_docker_exist() click to toggle source
# File lib/commands/create.rb, line 101
def check_docker_exist
    if File.file?("docker-compose.yml")
        puts "Error: docker-compose.yml exists"
        exit
    end
end
create_file(id, name, table_prefix, web_port, db_port) click to toggle source
# File lib/commands/create.rb, line 109
def create_file id, name, table_prefix, web_port, db_port
    template = File.join(File.dirname(File.realpath(__FILE__)), '../../templates/docker-compose.yml.tpl')

    file = File.open(template, "r")
    data = file.read
    file.close

    data = data.gsub! '{id}', id.to_s
    data = data.gsub! '{name}', name
    data = data.gsub! '{web_port}', web_port.to_s
    data = data.gsub! '{db_port}', db_port.to_s
    data = data.gsub! '{table_prefix}', table_prefix

    out_file = File.new("docker-compose.yml", "w")
    out_file.puts(data)
    out_file.close

    # puts data
end
get_port(default_port, message) click to toggle source
# File lib/commands/create.rb, line 81
def get_port default_port, message
    port = ask "#{message} (#{default_port}): "
    if port == ""
        return "#{default_port}"
    end

    i_port = port.to_i
    if i_port < 8000
        puts "Error: port must be a number higher than 8000: Actually #{port}"
        exit
    end

    if i_port > 65535
        puts "Error: port must be a number lower than 65535: Actually #{port}"
        exit
    end

    return port
end
get_proyect_name() click to toggle source
# File lib/commands/create.rb, line 52
def get_proyect_name 
    default = Dir.pwd.split('/').last.tr('^A-Za-z0-9', '').downcase
    name = ask "Enter container name (#{default}): "
    error_message = 'Invalid name. Only letters and numbers. Must start with letter'

    if name == ""
        return default
    end

    if !name.match(/^[[:alpha:]][[:alnum:]]+$/)
        puts error_message
        exit
    end
    return name
end
get_table_prefix(name) click to toggle source
# File lib/commands/create.rb, line 68
def get_table_prefix name
    prefix = ask "Enter mysql table prefix ('#{name}' for 'wp_#{name}_'): "
    if prefix == ""
        return name
    end
    error_message = 'Invalid name. Only letters and numbers. Must start with letter'
    if !name.match(/^[[:alpha:]][[:alnum:]]+$/)
        puts error_message
        exit
    end
    return prefix
end
wp_docker_create() click to toggle source
# File lib/commands/create.rb, line 1
def wp_docker_create
    check_docker_exist
    docker_manager = DockerManager.new
    id = docker_manager.get_new_wpd_id

    puts "New Instance Id: #{id}"

    name = get_proyect_name
    table_prefix = get_table_prefix name

    web_port = 18000 + id
    db_port = 13300 + id

    if !auto_ports? web_port, db_port
        web_port = get_port DEFAULT_WEB_PORT, "Enter Web Port"
        db_port = get_port DEFAULT_DB_PORT, "Enter Database Port"
    end

    create_file id, name, table_prefix, web_port, db_port
    dockerfile_wp = File.join(File.dirname(File.realpath(__FILE__)), '../../templates/Dockerfile-wp')
    FileUtils.copy dockerfile_wp, "./"

    Dir.mkdir './src'
    gitignore = File.join(File.dirname(File.realpath(__FILE__)), '../../templates/gitignore.tpl')
    FileUtils.copy gitignore, "./src/.gitignore"


    start_docker = ""
    while start_docker != "y" && start_docker != "n"
        start_docker = ask "Start? (y/n)"
    end

    if start_docker == "y"
        docker_start web_port
    end
end
wp_docker_exec() click to toggle source
# File lib/commands/exec.rb, line 1
def wp_docker_exec
    config_manager = ConfigManager.new
    name = config_manager.get_wp_container_name
    args = ARGV
    args.slice!(0)

    command="docker exec -it " + name + " " + args.join(" ")
    system(command)
end
wp_docker_execute_cli() click to toggle source
# File lib/commands/cli.rb, line 1
def wp_docker_execute_cli 
    config_manager = ConfigManager.new
    unless config_manager.is_docker_compose_folder
        puts "docker-compose.yml does not exists in current folder."
        puts
        exit
    end
    name = config_manager.get_wp_container_name
    args = ARGV
    args.slice!(0)

    command="docker exec -t " + name + " wp --allow-root " + args.join(" ")
    system(command)
    puts
end
wp_docker_help() click to toggle source
# File lib/commands/help.rb, line 1
def wp_docker_help
puts """
Usage wp-docker <command> [<options>]

Commands:
  create                         Create new wp-docker environment
  list                           Show available environments
  cli <command>                  Execute wp-cli in current wp-docker environment
  open                           Open browser
  shell [<environment>]          Open shell in web container
  exec <command>                 Execute command in current wp-docker environment
  start [<environment>]          Start wp-docker environment (default: current)
  stop [<environment>]           Stop wp-docker environment (default: current)
  remove [<environment>]         Remove wp-docker environment (default: current)
  logs [-t]                      Show apache web logs
  help                           Show this help
  
"""
end
wp_docker_list() click to toggle source
# File lib/commands/list.rb, line 1
def wp_docker_list
    docker_manager = DockerManager.new

    environments = docker_manager.get_environments
    puts fill_spaces("Environment", UI_ENV_SPACES) + fill_spaces("Web Port", UI_WEB_SPACES) + fill_spaces("DB Port", UI_DB_SPACES)
    puts ("-" * (UI_ENV_SPACES + UI_WEB_SPACES + UI_DB_SPACES))
    environments.each do |env| 
        puts fill_spaces(env["env"], UI_ENV_SPACES) + fill_spaces(env["web_port"], UI_WEB_SPACES) + fill_spaces(env["db_port"], UI_DB_SPACES)
    end
    puts 
end
wp_docker_logs() click to toggle source
# File lib/commands/logs.rb, line 1
def wp_docker_logs
    config_manager = ConfigManager.new
    name = config_manager.get_wp_container_name

    tail_option = ""
    if ARGV.count == 2
        if ARGV[1] == "-t"
            tail_option = " -f"
        else
            wp_docker_help
            exit
        end
    end

    command="docker logs " + name + tail_option
    system(command)
end
wp_docker_open_browser() click to toggle source
# File lib/commands/browser.rb, line 1
def wp_docker_open_browser
    config_manager = ConfigManager.new
    port = config_manager.get_wp_container_port

    command="open http://localhost:" + port
    system(command)
end
wp_docker_remove() click to toggle source
# File lib/commands/remove.rb, line 1
def wp_docker_remove
  config_manager = ConfigManager.new

  if ARGV.count == 2
    env = ARGV[1]
  else
    env = config_manager.get_wp_environment_name
  end

  if env != nil
    docker_manager = DockerManager.new
    docker_manager.remove env
  end

end
wp_docker_shell() click to toggle source
# File lib/commands/shell.rb, line 1
def wp_docker_shell
  config_manager = ConfigManager.new

  if ARGV.count == 2
    container = "wpd_web_" + ARGV[1]
  else
    container = config_manager.get_wp_container_name
  end

  if container != nil
    command = "docker exec -it " + container + " /bin/bash"
    puts " - Executing: " + command
    puts
    system(command)
  end
end
wp_docker_start() click to toggle source
# File lib/commands/start.rb, line 1
def wp_docker_start
  config_manager = ConfigManager.new

  if ARGV.count == 2
    env = ARGV[1]
  else
    env = config_manager.get_wp_environment_name
  end

  if env != nil
    docker_manager = DockerManager.new
    docker_manager.start env
  end

end
wp_docker_stop() click to toggle source
# File lib/commands/stop.rb, line 1
def wp_docker_stop
  config_manager = ConfigManager.new

  if ARGV.count == 2
    env = ARGV[1]
  else
    env = config_manager.get_wp_environment_name
  end

  if env != nil
    docker_manager = DockerManager.new
    docker_manager.stop env
  end

end