theme-juice 0.6.18 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +106 -75
- data/bin/tj +5 -5
- data/lib/theme-juice.rb +32 -16
- data/lib/theme-juice/cli.rb +191 -298
- data/lib/theme-juice/command.rb +14 -13
- data/lib/theme-juice/commands/create.rb +214 -9
- data/lib/theme-juice/commands/delete.rb +45 -10
- data/lib/theme-juice/commands/deploy.rb +20 -0
- data/lib/theme-juice/config.rb +43 -0
- data/lib/theme-juice/env.rb +25 -0
- data/lib/theme-juice/io.rb +323 -0
- data/lib/theme-juice/project.rb +35 -0
- data/lib/theme-juice/task.rb +42 -0
- data/lib/theme-juice/tasks/create_confirm.rb +33 -0
- data/lib/theme-juice/tasks/create_success.rb +42 -0
- data/lib/theme-juice/tasks/database.rb +50 -0
- data/lib/theme-juice/tasks/delete_confirm.rb +24 -0
- data/lib/theme-juice/tasks/delete_success.rb +31 -0
- data/lib/theme-juice/tasks/dns.rb +45 -0
- data/lib/theme-juice/tasks/dot_env.rb +53 -0
- data/lib/theme-juice/tasks/entry.rb +50 -0
- data/lib/theme-juice/tasks/hosts.rb +43 -0
- data/lib/theme-juice/tasks/import_database.rb +28 -0
- data/lib/theme-juice/tasks/landrush.rb +33 -0
- data/lib/theme-juice/tasks/list.rb +50 -0
- data/lib/theme-juice/tasks/location.rb +23 -0
- data/lib/theme-juice/tasks/nginx.rb +51 -0
- data/lib/theme-juice/tasks/repo.rb +49 -0
- data/lib/theme-juice/tasks/synced_folder.rb +30 -0
- data/lib/theme-juice/tasks/theme.rb +34 -0
- data/lib/theme-juice/tasks/vm.rb +30 -0
- data/lib/theme-juice/tasks/vm_customfile.rb +42 -0
- data/lib/theme-juice/tasks/vm_location.rb +32 -0
- data/lib/theme-juice/tasks/vm_plugins.rb +32 -0
- data/lib/theme-juice/tasks/vm_provision.rb +39 -0
- data/lib/theme-juice/tasks/vm_restart.rb +25 -0
- data/lib/theme-juice/tasks/wp_cli.rb +52 -0
- data/lib/theme-juice/util.rb +45 -0
- data/lib/theme-juice/version.rb +1 -1
- metadata +66 -34
- data/LICENSE +0 -339
- data/lib/theme-juice/commands/install.rb +0 -16
- data/lib/theme-juice/commands/list.rb +0 -16
- data/lib/theme-juice/commands/subcommand.rb +0 -16
- data/lib/theme-juice/environment.rb +0 -15
- data/lib/theme-juice/interaction.rb +0 -445
- data/lib/theme-juice/interactions/create.rb +0 -278
- data/lib/theme-juice/interactions/delete.rb +0 -48
- data/lib/theme-juice/interactions/teejay.rb +0 -12
- data/lib/theme-juice/service.rb +0 -224
- data/lib/theme-juice/services/config.rb +0 -44
- data/lib/theme-juice/services/create.rb +0 -376
- data/lib/theme-juice/services/delete.rb +0 -113
- data/lib/theme-juice/services/list.rb +0 -40
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module ThemeJuice
|
4
|
+
module Project
|
5
|
+
attr_accessor :name
|
6
|
+
attr_accessor :location
|
7
|
+
attr_accessor :url
|
8
|
+
attr_accessor :theme
|
9
|
+
attr_accessor :vm_root
|
10
|
+
attr_accessor :vm_location
|
11
|
+
attr_accessor :vm_srv
|
12
|
+
attr_accessor :vm_restart
|
13
|
+
attr_accessor :repository
|
14
|
+
attr_accessor :db_host
|
15
|
+
attr_accessor :db_name
|
16
|
+
attr_accessor :db_user
|
17
|
+
attr_accessor :db_pass
|
18
|
+
attr_accessor :db_import
|
19
|
+
attr_accessor :db_drop
|
20
|
+
attr_accessor :bare
|
21
|
+
attr_accessor :skip_repo
|
22
|
+
attr_accessor :skip_db
|
23
|
+
attr_accessor :use_defaults
|
24
|
+
attr_accessor :no_wp
|
25
|
+
attr_accessor :no_db
|
26
|
+
|
27
|
+
def inspect
|
28
|
+
res = []
|
29
|
+
self.instance_variables.each { |k, _| res << "#{k[1..-1]}: #{instance_variable_get(k)}" }
|
30
|
+
res.sort
|
31
|
+
end
|
32
|
+
|
33
|
+
extend self
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module ThemeJuice
|
4
|
+
class Task
|
5
|
+
|
6
|
+
def initialize(opts = {})
|
7
|
+
@env = Env
|
8
|
+
@io = IO
|
9
|
+
@project = Project
|
10
|
+
@config = Config
|
11
|
+
@util = Util.new
|
12
|
+
@opts = opts.dup
|
13
|
+
@tasks = []
|
14
|
+
end
|
15
|
+
|
16
|
+
def runner
|
17
|
+
yield @tasks
|
18
|
+
end
|
19
|
+
|
20
|
+
def execute
|
21
|
+
@io.error "Method 'execute' not implemented for #{self.class.name}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def unexecute
|
25
|
+
@io.error "Method 'unexecute' not implemented for #{self.class.name}"
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def vm_root
|
31
|
+
File.expand_path "#{@env.vm_path}/www"
|
32
|
+
end
|
33
|
+
|
34
|
+
def vm_location
|
35
|
+
"#{vm_root}/#{@env.vm_prefix}#{@project.name}"
|
36
|
+
end
|
37
|
+
|
38
|
+
def vm_srv
|
39
|
+
"/srv/www/#{@env.vm_prefix}#{@project.name}"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module ThemeJuice
|
4
|
+
module Tasks
|
5
|
+
class CreateConfirm < Task
|
6
|
+
|
7
|
+
def initialize(opts = {})
|
8
|
+
super
|
9
|
+
end
|
10
|
+
|
11
|
+
def execute
|
12
|
+
confirm
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def confirm
|
18
|
+
@io.list "Your settings :", :yellow, settings
|
19
|
+
unless @io.agree? "Do these settings look correct?"
|
20
|
+
@io.error "Dang typos..."
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def settings
|
25
|
+
if @env.verbose
|
26
|
+
@env.inspect + @project.inspect
|
27
|
+
else
|
28
|
+
@project.inspect
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module ThemeJuice
|
4
|
+
module Tasks
|
5
|
+
class CreateSuccess < Task
|
6
|
+
|
7
|
+
def initialize(opts = {})
|
8
|
+
super
|
9
|
+
|
10
|
+
@vm_provision = Tasks::VMProvision.new(opts)
|
11
|
+
end
|
12
|
+
|
13
|
+
def execute
|
14
|
+
provision_vm
|
15
|
+
success
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def provision_vm
|
21
|
+
if @io.agree? "In order to finish creating your project, you need to provision the VM. Do it now?"
|
22
|
+
@vm_provision.execute
|
23
|
+
else
|
24
|
+
@io.notice "Remember, the VM needs to be provisioned before you can use your new site"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def success
|
29
|
+
@io.success "Successfully created project '#{@project.name}'"
|
30
|
+
@io.list "Your settings :", :yellow, settings
|
31
|
+
end
|
32
|
+
|
33
|
+
def settings
|
34
|
+
if @env.verbose
|
35
|
+
@env.inspect + @project.inspect
|
36
|
+
else
|
37
|
+
@project.inspect
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module ThemeJuice
|
4
|
+
module Tasks
|
5
|
+
class Database < Entry
|
6
|
+
|
7
|
+
def initialize(opts = {})
|
8
|
+
super
|
9
|
+
|
10
|
+
@entry = {
|
11
|
+
:project => @project.name,
|
12
|
+
:file => "#{@env.vm_path}/database/init-custom.sql",
|
13
|
+
:name => "database",
|
14
|
+
:id => "DB"
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
def execute
|
19
|
+
if @project.db_host && @project.db_name && @project.db_user && @project.db_pass
|
20
|
+
create_entry_file
|
21
|
+
create_entry do
|
22
|
+
%Q{CREATE DATABASE IF NOT EXISTS `#{@project.db_name}`;
|
23
|
+
GRANT ALL PRIVILEGES ON `#{@project.db_name}`.* TO '#{@project.db_user}'@'localhost' IDENTIFIED BY '#{@project.db_pass}';}
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def unexecute
|
29
|
+
remove_entry
|
30
|
+
drop_database
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def drop_database
|
36
|
+
if @project.db_drop
|
37
|
+
|
38
|
+
# Double check that the database should be dropped
|
39
|
+
if @io.agree? "Are you sure you want to drop the database for '#{@project.name}'?"
|
40
|
+
@io.log "Dropping database"
|
41
|
+
@util.run_inside_vm [], :verbose => @env.verbose do |cmds|
|
42
|
+
cmds << "cd #{@project.vm_srv}"
|
43
|
+
cmds << "wp db drop --yes"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module ThemeJuice
|
4
|
+
module Tasks
|
5
|
+
class DeleteConfirm < Task
|
6
|
+
|
7
|
+
def initialize(opts = {})
|
8
|
+
super
|
9
|
+
end
|
10
|
+
|
11
|
+
def unexecute
|
12
|
+
confirm
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def confirm
|
18
|
+
unless @io.agree? "Are you sure you want to remove '#{@project.name}'?"
|
19
|
+
@io.error "Aborting mission"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module ThemeJuice
|
4
|
+
module Tasks
|
5
|
+
class DeleteSuccess < Task
|
6
|
+
|
7
|
+
def initialize(opts = {})
|
8
|
+
super
|
9
|
+
|
10
|
+
@vm_restart = Tasks::VMRestart.new(opts)
|
11
|
+
end
|
12
|
+
|
13
|
+
def unexecute
|
14
|
+
restart_vm
|
15
|
+
success
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def restart_vm
|
21
|
+
if @project.vm_restart
|
22
|
+
@vm_restart.execute
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def success
|
27
|
+
@io.success "Successfully removed project '#{@project.name}'"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module ThemeJuice
|
4
|
+
module Tasks
|
5
|
+
class DNS < Entry
|
6
|
+
|
7
|
+
def initialize(opts = {})
|
8
|
+
super
|
9
|
+
|
10
|
+
@entry = {
|
11
|
+
:project => @project.name,
|
12
|
+
:file => "#{@env.vm_path}/Customfile",
|
13
|
+
:name => "DNS",
|
14
|
+
:id => "DNS"
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
def execute
|
19
|
+
create_entry_file
|
20
|
+
create_entry do
|
21
|
+
%Q{if defined? Landrush
|
22
|
+
config.landrush.host '#{@project.url}', '#{@env.vm_ip}'
|
23
|
+
elsif defined? VagrantPlugins::HostsUpdater
|
24
|
+
config.hostsupdater.aliases << '#{@project.url}'
|
25
|
+
end}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def unexecute
|
30
|
+
remove_landrush_entry
|
31
|
+
remove_entry
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def remove_landrush_entry
|
37
|
+
unless @env.no_landrush
|
38
|
+
@io.log "Removing URL from Landrush"
|
39
|
+
@util.run "vagrant landrush rm #{@project.url}",
|
40
|
+
:verbose => @env.verbose
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module ThemeJuice
|
4
|
+
module Tasks
|
5
|
+
class DotEnv < Task
|
6
|
+
|
7
|
+
def initialize(opts = {})
|
8
|
+
super
|
9
|
+
end
|
10
|
+
|
11
|
+
def execute
|
12
|
+
unless @project.no_wp
|
13
|
+
create_dot_env_file
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def unexecute
|
18
|
+
remove_dot_env_file
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def dot_env_file
|
24
|
+
"#{@project.location}/.env.development"
|
25
|
+
end
|
26
|
+
|
27
|
+
def dot_env_is_setup?
|
28
|
+
File.exist? dot_env_file
|
29
|
+
end
|
30
|
+
|
31
|
+
def create_dot_env_file
|
32
|
+
unless dot_env_is_setup?
|
33
|
+
@io.log "Creating .env file"
|
34
|
+
@util.create_file dot_env_file, :verbose => @env.verbose do
|
35
|
+
%Q{DB_NAME=#{@project.db_name}
|
36
|
+
DB_USER=#{@project.db_user}
|
37
|
+
DB_PASSWORD=#{@project.db_pass}
|
38
|
+
DB_HOST=#{@project.db_host}
|
39
|
+
WP_HOME=http://#{@project.url}
|
40
|
+
WP_SITEURL=http://#{@project.url}/wp
|
41
|
+
|
42
|
+
}
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def remove_dot_env_file
|
48
|
+
@io.log "Removing .env file"
|
49
|
+
@util.remove_file dot_env_file, :verbose => @env.verbose
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module ThemeJuice
|
4
|
+
module Tasks
|
5
|
+
class Entry < Task
|
6
|
+
attr_accessor :entry
|
7
|
+
|
8
|
+
def initialize(opts = {})
|
9
|
+
super
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def entry_file_is_setup?
|
15
|
+
File.exist? @entry.fetch(:file)
|
16
|
+
end
|
17
|
+
|
18
|
+
def create_entry_file
|
19
|
+
unless entry_file_is_setup?
|
20
|
+
@io.log "Creating #{@entry.fetch(:name)} file"
|
21
|
+
@util.create_file @entry.fetch(:file), nil, :verbose => @env.verbose
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def entry_is_setup?
|
26
|
+
File.readlines(@entry.fetch(:file)).grep(/(#(#*)? Begin '#{@entry.fetch(:project)}' #{@entry.fetch(:id)})/m).any?
|
27
|
+
end
|
28
|
+
|
29
|
+
def create_entry(&block)
|
30
|
+
unless entry_is_setup?
|
31
|
+
@io.log "Creating #{@entry.fetch(:name)} entry"
|
32
|
+
@util.append_to_file @entry.fetch(:file), :verbose => @env.verbose do
|
33
|
+
%Q{# Begin '#{@entry.fetch(:project)}' #{@entry.fetch(:id)}
|
34
|
+
# The contents below are automatically generated by Theme Juice. Do not modify.
|
35
|
+
#{yield}
|
36
|
+
# End '#{@entry.fetch(:project)}' #{@entry.fetch(:id)}
|
37
|
+
|
38
|
+
}
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def remove_entry
|
44
|
+
@io.log "Removing #{@entry.fetch(:name)} entry"
|
45
|
+
@util.gsub_file @entry.fetch(:file), /(#(#*)? Begin '#{@entry.fetch(:project)}' #{@entry.fetch(:id)})(.*?)(#(#*)? End '#{@entry.fetch(:project)}' #{@entry.fetch(:id)})\n+/m,
|
46
|
+
"", :verbose => @env.verbose
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module ThemeJuice
|
4
|
+
module Tasks
|
5
|
+
class Hosts < Task
|
6
|
+
|
7
|
+
def initialize(opts = {})
|
8
|
+
super
|
9
|
+
end
|
10
|
+
|
11
|
+
def execute
|
12
|
+
create_hosts_file
|
13
|
+
end
|
14
|
+
|
15
|
+
def unexecute
|
16
|
+
remove_hosts_file
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def hosts_file
|
22
|
+
"#{@project.location}/vvv-hosts"
|
23
|
+
end
|
24
|
+
|
25
|
+
def hosts_is_setup?
|
26
|
+
File.exist? hosts_file
|
27
|
+
end
|
28
|
+
|
29
|
+
def create_hosts_file
|
30
|
+
unless hosts_is_setup?
|
31
|
+
@io.log "Creating hosts file"
|
32
|
+
@util.create_file hosts_file, "#{@project.url}",
|
33
|
+
:verbose => @env.verbose
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def remove_hosts_file
|
38
|
+
@io.log "Removing hosts file"
|
39
|
+
@util.remove_file hosts_file, :verbose => @env.verbose
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|