Top Level Namespace

Defined Under Namespace

Modules: CONFIG Classes: ConfigManager, DockerManager

Instance Method Summary collapse

Instance Method Details

#auto_ports?(default_web_port, default_db_port) ⇒ Boolean

Returns:

  • (Boolean)


38
39
40
41
42
43
44
45
46
47
48
49
50
# 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_existObject



101
102
103
104
105
106
# 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) ⇒ Object



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# 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) ⇒ Object



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# 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_nameObject



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# 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) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
79
# 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_createObject



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 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_execObject



1
2
3
4
5
6
7
8
9
# 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_cliObject



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 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_helpObject



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 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_listObject



1
2
3
4
5
6
7
8
9
10
11
# 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_logsObject



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 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_browserObject



1
2
3
4
5
6
7
# 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_removeObject



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 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_shellObject



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 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_startObject



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 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_stopObject



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 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