marv 0.3.2 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/CHANGELOG.md +13 -0
- data/Gemfile +8 -10
- data/Gemfile.lock +16 -43
- data/LICENSE +0 -24
- data/README.md +9 -10
- data/Rakefile +4 -20
- data/VERSION +1 -1
- data/bin/marv +1 -1
- data/layouts/config/global.rb +31 -0
- data/layouts/config/project.rb +27 -0
- data/layouts/config/{router.php.erb → router.php} +5 -1
- data/layouts/config/server.rb +12 -0
- data/layouts/config/{wp-config.php.erb → wp-config.php} +0 -0
- data/layouts/plugin/{images → assets/images}/screenshot.png +0 -0
- data/layouts/plugin/{javascripts → assets/javascripts}/admin.coffee +0 -0
- data/layouts/plugin/{javascripts → assets/javascripts}/admin.js +0 -0
- data/layouts/plugin/{javascripts → assets/javascripts}/plugin.coffee +0 -0
- data/layouts/plugin/assets/javascripts/plugin.js +1 -0
- data/layouts/plugin/{stylesheets → assets/stylesheets}/plugin.scss +0 -0
- data/layouts/plugin/functions/{plugin.php.erb → plugin.php} +8 -7
- data/layouts/theme/{images → assets/images}/screenshot.png +0 -0
- data/layouts/theme/{javascripts → assets/javascripts}/admin.coffee +0 -0
- data/layouts/theme/{javascripts → assets/javascripts}/admin.js +0 -0
- data/layouts/theme/{javascripts → assets/javascripts}/theme.coffee +0 -0
- data/layouts/theme/{javascripts → assets/javascripts}/theme.js +0 -0
- data/layouts/theme/assets/stylesheets/_header.scss +18 -0
- data/layouts/theme/{stylesheets/style.scss.erb → assets/stylesheets/style.scss} +0 -0
- data/layouts/theme/functions/{functions.php.erb → functions.php} +0 -0
- data/layouts/theme/includes/{filters-admin.php.erb → filters-admin.php} +0 -0
- data/layouts/theme/includes/{filters.php.erb → filters.php} +0 -0
- data/layouts/theme/includes/{helpers.php.erb → helpers.php} +0 -0
- data/layouts/theme/templates/{404.php.erb → pages/404.php} +0 -0
- data/layouts/theme/templates/{archive.php.erb → pages/archive.php} +0 -0
- data/layouts/theme/templates/{author.php.erb → pages/author.php} +0 -0
- data/layouts/theme/templates/{search.php.erb → pages/search.php} +0 -0
- data/layouts/theme/templates/partials/{comments.php.erb → comments.php} +0 -0
- data/layouts/theme/templates/partials/{content-none.php.erb → content-none.php} +0 -0
- data/layouts/theme/templates/partials/{content.php.erb → content.php} +0 -0
- data/layouts/theme/templates/partials/{searchform.php.erb → searchform.php} +0 -0
- data/lib/marv.rb +8 -8
- data/lib/marv/cli.rb +15 -192
- data/lib/marv/cli/project.rb +57 -0
- data/lib/marv/cli/server.rb +65 -0
- data/lib/marv/global.rb +285 -0
- data/lib/marv/project/actions.rb +144 -0
- data/lib/marv/project/builder.rb +61 -0
- data/lib/marv/project/builder/assets.rb +112 -0
- data/lib/marv/{engines.rb → project/builder/engines.rb} +3 -1
- data/lib/marv/project/builder/functions.rb +112 -0
- data/lib/marv/project/builder/templates.rb +37 -0
- data/lib/marv/project/create.rb +139 -0
- data/lib/marv/project/guard.rb +83 -0
- data/lib/marv/project/guard/assets.rb +37 -0
- data/lib/{guard/marv → marv/project/guard}/config.rb +5 -9
- data/lib/marv/project/guard/functions.rb +44 -0
- data/lib/marv/project/guard/templates.rb +35 -0
- data/lib/marv/project/project.rb +149 -0
- data/lib/marv/server/actions.rb +79 -0
- data/lib/marv/server/create.rb +100 -0
- data/lib/marv/server/server.rb +201 -0
- data/marv.gemspec +69 -71
- metadata +82 -107
- data/.rspec +0 -1
- data/features/step_definitions/marv_steps.rb +0 -38
- data/features/support/env.rb +0 -17
- data/layouts/config/project-config.rb +0 -17
- data/layouts/plugin/javascripts/plugin.js +0 -1
- data/layouts/theme/stylesheets/_header.scss.erb +0 -18
- data/lib/guard/marv/assets.rb +0 -33
- data/lib/guard/marv/folders.rb +0 -33
- data/lib/guard/marv/functions.rb +0 -34
- data/lib/guard/marv/templates.rb +0 -33
- data/lib/marv/builder.rb +0 -355
- data/lib/marv/error.rb +0 -8
- data/lib/marv/generator.rb +0 -140
- data/lib/marv/guard.rb +0 -68
- data/lib/marv/project.rb +0 -134
- data/lib/marv/server.rb +0 -284
- data/spec/lib/marv/project_spec.rb +0 -34
- data/spec/spec_helper.rb +0 -12
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,18 @@
|
|
1
|
+
/*!
|
2
|
+
* Theme Name: <%= project_config[:name] %>
|
3
|
+
* Theme URI: <%= project_config[:uri] %>
|
4
|
+
* Author: <%= project_config[:author] %>
|
5
|
+
* Author URI: <%= project_config[:author_uri] %>
|
6
|
+
* Description: <%= project_config[:description] %>
|
7
|
+
* Version: <%= project_config[:version] %>
|
8
|
+
* License: <%= project_config[:license_name] %>
|
9
|
+
* License URI: <%= project_config[:license_uri] %>
|
10
|
+
* Tags: <%= project_config[:tags] %>
|
11
|
+
<% if project_config[:template] -%>
|
12
|
+
* Template: <%= project_config[:template] %>
|
13
|
+
<% end -%>
|
14
|
+
<%- unless project_config[:comments].nil? || project_config[:comments].empty? -%>
|
15
|
+
*
|
16
|
+
* Comments: <%= project_config[:comments] %>
|
17
|
+
<%- end -%>
|
18
|
+
*/
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/lib/marv.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
require '
|
1
|
+
require 'thor'
|
2
|
+
require 'marv/cli'
|
3
|
+
require 'marv/global'
|
2
4
|
|
3
5
|
module Marv
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
autoload :Generator, 'marv/generator'
|
10
|
-
autoload :Server, 'marv/server'
|
6
|
+
|
7
|
+
def self.root
|
8
|
+
::File.expand_path(::File.join(::File.dirname(__FILE__), '..'))
|
9
|
+
end
|
10
|
+
|
11
11
|
end
|
data/lib/marv/cli.rb
CHANGED
@@ -1,202 +1,25 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
3
|
-
require 'guard/marv/config'
|
4
|
-
require 'guard/marv/templates'
|
5
|
-
require 'guard/marv/functions'
|
6
|
-
require 'guard/marv/folders'
|
1
|
+
require 'marv/cli/project'
|
2
|
+
require 'marv/cli/server'
|
7
3
|
|
8
4
|
module Marv
|
9
|
-
|
5
|
+
module CLI
|
6
|
+
class Commands < Project
|
10
7
|
|
11
|
-
|
12
|
-
|
13
|
-
def self.source_root
|
14
|
-
File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'layouts'))
|
15
|
-
end
|
16
|
-
|
17
|
-
desc "create DIRECTORY", "Creates a Marv project into specified directory"
|
18
|
-
long_desc "Creates a new project. Use the layout option to choose a scaffold"
|
19
|
-
method_option :layout, :type => :string, :default => 'theme', :enum => %w{theme plugin}, :desc => "Scaffold layout for theme or plugin"
|
20
|
-
method_option :local, :type => :boolean, :force => false, :desc => "Use custom layout from ~/.marv/layouts folder"
|
21
|
-
def create(dir)
|
22
|
-
theme = {}
|
23
|
-
theme[:name] = dir
|
24
|
-
|
25
|
-
project = Marv::Project.create(dir, theme, self, options[:layout], options[:local])
|
26
|
-
end
|
27
|
-
|
28
|
-
desc "link SERVER or DIRECTORY", "Create a symbolic link to the compilation directory"
|
29
|
-
long_desc "This command will symlink the compiled version of the project to the specified server or WordPress install path."+
|
30
|
-
"If you don't provide a directory or a server name, the symlink will be created in Marv global themes or plugins folder."
|
31
|
-
method_option :folder, :type => :string, :enum => %w{themes plugins}, :required => true, :desc => "Link Marv project in themes or plugins folfer"
|
32
|
-
def link(dir=nil)
|
33
|
-
project = Marv::Project.new('.', self)
|
34
|
-
|
35
|
-
unless File.directory?(project.build_path)
|
36
|
-
FileUtils.mkdir_p project.build_path
|
37
|
-
end
|
38
|
-
|
39
|
-
if dir.nil?
|
40
|
-
link_project_globaly(options, project)
|
41
|
-
else
|
42
|
-
wp_path = File.join(dir, 'wp-content', options[:folder])
|
43
|
-
server_path = File.join(ENV['HOME'], '.marv', 'servers', dir, 'wp-content', options[:folder])
|
44
|
-
link_project(wp_path, server_path, project)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
desc "watch", "Start watch process"
|
49
|
-
long_desc "Watches the source directory in your Marv project for changes, and reflects those changes in a compile folder"
|
50
|
-
method_option :config, :type => :string, :desc => "Name of alternate config file"
|
51
|
-
def watch
|
52
|
-
project = Marv::Project.new('.', self, nil, options[:config])
|
53
|
-
|
54
|
-
# Empty the build directory before starting up to clean out old files
|
55
|
-
FileUtils.rm_rf project.build_path
|
56
|
-
FileUtils.mkdir_p project.build_path
|
57
|
-
|
58
|
-
Marv::Guard.start(project, self)
|
59
|
-
end
|
60
|
-
|
61
|
-
desc "build DIRECTORY", "Build your theme into specified directory"
|
62
|
-
method_option :config, :type => :string, :desc => "Name of alternate config file"
|
63
|
-
def build(dir='build')
|
64
|
-
project = Marv::Project.new('.', self, nil, options[:config])
|
65
|
-
|
66
|
-
builder = Builder.new(project)
|
67
|
-
builder.build
|
68
|
-
|
69
|
-
Dir.glob(File.join(dir, '**', '*')).each do |file|
|
70
|
-
shell.mute { remove_file(file) }
|
71
|
-
end
|
72
|
-
|
73
|
-
directory(project.build_path, dir)
|
74
|
-
end
|
75
|
-
|
76
|
-
desc "package FILENAME", "Compile and zip your Marv project to FILENAME.zip"
|
77
|
-
method_option :config, :type => :string, :desc => "Name of alternate config file"
|
78
|
-
def package(filename=nil)
|
79
|
-
project = Marv::Project.new('.', self, nil, options[:config])
|
80
|
-
|
81
|
-
builder = Builder.new(project)
|
82
|
-
builder.build
|
83
|
-
builder.zip(filename)
|
84
|
-
end
|
85
|
-
|
86
|
-
desc "server SERVER", "Create a Marv server with the specified name"
|
87
|
-
method_option :list, :type => :boolean, :force => false, :desc => "List all available Marv servers"
|
88
|
-
method_option :start, :type => :boolean, :force => false, :desc => "Create a new Marv server"
|
89
|
-
method_option :stop, :type => :boolean, :force => false, :desc => "Stop a running Marv server"
|
90
|
-
method_option :restart, :type => :boolean, :force => false, :desc => "Restart a Marv server"
|
91
|
-
# method_option :backup, :type => :boolean, :force => false, :desc => "Backup a Marv server"
|
92
|
-
# method_option :restore, :type => :boolean, :force => false, :desc => "Restore a Marv server"
|
93
|
-
method_option :remove, :type => :boolean, :force => false, :desc => "Remove a Marv server"
|
94
|
-
def server(name=nil)
|
95
|
-
if options.empty?
|
96
|
-
server = Marv::Server.new(name, self, server_config)
|
97
|
-
server.create_server
|
8
|
+
def self.source_root
|
9
|
+
::File.expand_path(::File.join(Marv.root, 'layouts'))
|
98
10
|
end
|
99
11
|
|
100
|
-
|
101
|
-
|
102
|
-
|
12
|
+
# Configure marv
|
13
|
+
desc "config", "Configure Marv projects and servers"
|
14
|
+
long_desc "Creates a global config.rb file that can be used to auto-configure your projects and servers"
|
15
|
+
def config
|
16
|
+
global = Marv::Global.new(self)
|
17
|
+
global.reconfigure
|
103
18
|
end
|
104
19
|
|
105
|
-
|
106
|
-
|
107
|
-
control_server(options, name, server)
|
108
|
-
end
|
20
|
+
desc "server [SUBCOMMAND]", "Manage marv servers (create, start and more...)"
|
21
|
+
subcommand "server", Server
|
109
22
|
|
110
|
-
if options[:list]
|
111
|
-
list_servers
|
112
|
-
end
|
113
23
|
end
|
114
|
-
|
115
|
-
protected
|
116
|
-
|
117
|
-
def link_project_globaly(options, project)
|
118
|
-
project_folder = project.project_id.gsub('_', '-')
|
119
|
-
global_folder = File.join(ENV['HOME'], '.marv', options[:folder])
|
120
|
-
|
121
|
-
unless File.directory?(global_folder)
|
122
|
-
FileUtils.mkdir_p global_folder
|
123
|
-
end
|
124
|
-
|
125
|
-
do_link(project, File.join(global_folder, project_folder))
|
126
|
-
|
127
|
-
servers = Dir.glob(File.join(ENV['HOME'], '.marv', 'servers' , '*'))
|
128
|
-
|
129
|
-
servers.each do |server|
|
130
|
-
shell.mute { do_link(project, File.join(server, 'wp-content', options[:folder], project_folder)) }
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
def server_config(remove=nil, name=nil)
|
135
|
-
config = {}
|
136
|
-
|
137
|
-
if remove.nil?
|
138
|
-
say "This will create a new Marv server with WordPress installed:", :green
|
139
|
-
else
|
140
|
-
say "This will remove #{name} server:", :yellow
|
141
|
-
end
|
142
|
-
|
143
|
-
config[:user] = ask("Mysql username:", nil, {:default => "root"})
|
144
|
-
config[:password] = ask("Mysql user password:", nil, {:default => "required"})
|
145
|
-
config[:host] = ask("Mysql host:", nil, {:default => "localhost"})
|
146
|
-
config[:port] = ask("Mysql port:", nil, {:default => "3306"})
|
147
|
-
|
148
|
-
if remove.nil?
|
149
|
-
config[:version] = ask("WordPress version:", nil, {:default => "latest"})
|
150
|
-
end
|
151
|
-
|
152
|
-
config
|
153
|
-
end
|
154
|
-
|
155
|
-
def control_server(options, name, server)
|
156
|
-
if options[:start]
|
157
|
-
server.start_server
|
158
|
-
end
|
159
|
-
|
160
|
-
if options[:stop]
|
161
|
-
server.stop_server
|
162
|
-
end
|
163
|
-
|
164
|
-
if options[:restart]
|
165
|
-
server.restart_server
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
def list_servers
|
170
|
-
servers_root = File.join(ENV['HOME'], '.marv', 'servers')
|
171
|
-
servers = Dir.glob(File.join(servers_root, '*'))
|
172
|
-
|
173
|
-
say "Available marv servers:"
|
174
|
-
servers.each do |server|
|
175
|
-
say '- ' + File.basename(server), :cyan
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
def link_project( wp_path, server_path, project)
|
180
|
-
project_folder = project.project_id.gsub('_', '-')
|
181
|
-
|
182
|
-
if File.directory?(wp_path)
|
183
|
-
do_link(project, File.join(wp_path, project_folder))
|
184
|
-
else
|
185
|
-
do_link(project, File.join(server_path, project_folder))
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
def do_link(project, path)
|
190
|
-
begin
|
191
|
-
project.link(path)
|
192
|
-
rescue LinkSourceDirNotFound
|
193
|
-
say_status :error, "The path #{File.dirname(path)} does not exist", :red
|
194
|
-
exit 2
|
195
|
-
rescue Errno::EEXIST
|
196
|
-
say_status :error, "The path #{path} already exists", :red
|
197
|
-
exit 2
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
24
|
end
|
202
|
-
end
|
25
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'marv/project/project'
|
2
|
+
|
3
|
+
module Marv
|
4
|
+
module CLI
|
5
|
+
class Project < Thor
|
6
|
+
|
7
|
+
include Thor::Actions
|
8
|
+
|
9
|
+
# Create a new Marv project
|
10
|
+
desc "create DIRECTORY", "Creates a Marv project into specified directory"
|
11
|
+
long_desc "Creates a new project. Use the layout option to choose a scaffold"
|
12
|
+
def create(dir)
|
13
|
+
Marv::Project::Create.new(self, dir)
|
14
|
+
end
|
15
|
+
|
16
|
+
# Link an existing project to a Marv server or an existing WordPress installation
|
17
|
+
desc "link SERVER or DIRECTORY", "Create a symbolic link to the compilation directory"
|
18
|
+
long_desc "This command will symlink the compiled version of the project to the specified server or WordPress install path."+
|
19
|
+
"If you don't provide a directory or a server name, the symlink will be created in Marv global themes or plugins folder."
|
20
|
+
def link(dir=nil)
|
21
|
+
project = Marv::Project::Project.new(self, '.', nil)
|
22
|
+
actions = Marv::Project::Actions.new(project, nil)
|
23
|
+
actions.link(dir)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Watch a Marv project for changes
|
27
|
+
desc "watch", "Start watch process"
|
28
|
+
long_desc "Watches the source directory in your Marv project for changes, and reflects those changes in a compile folder"
|
29
|
+
method_option :config, :type => :string, :desc => "Name of alternate config file"
|
30
|
+
def watch
|
31
|
+
project = Marv::Project::Project.new(self, '.', options[:config])
|
32
|
+
builder = Marv::Project::Builder.new(project)
|
33
|
+
Marv::Project::Guard.start(project, builder)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Build a Marv project to a directory
|
37
|
+
desc "build DIRECTORY", "Build your theme into specified directory"
|
38
|
+
method_option :config, :type => :string, :desc => "Name of alternate config file"
|
39
|
+
def build(dir='build')
|
40
|
+
project = Marv::Project::Project.new(self, '.', options[:config])
|
41
|
+
builder = Marv::Project::Builder.new(project)
|
42
|
+
builder.build_to(dir)
|
43
|
+
end
|
44
|
+
|
45
|
+
# Package a Marv project in a .zip file
|
46
|
+
desc "package FILENAME", "Compile and zip your Marv project to FILENAME.zip"
|
47
|
+
method_option :config, :type => :string, :desc => "Name of alternate config file"
|
48
|
+
def package(filename=nil)
|
49
|
+
project = Marv::Project::Project.new(self, '.', options[:config])
|
50
|
+
builder = Marv::Project::Builder.new(project)
|
51
|
+
actions = Marv::Project::Actions.new(project, builder)
|
52
|
+
actions.package(filename)
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'marv/server/server'
|
2
|
+
|
3
|
+
module Marv
|
4
|
+
module CLI
|
5
|
+
class Server < Thor
|
6
|
+
|
7
|
+
def self.source_root
|
8
|
+
::File.expand_path(::File.join(Marv.root, 'layouts'))
|
9
|
+
end
|
10
|
+
|
11
|
+
include Thor::Actions
|
12
|
+
|
13
|
+
# List all Marv servers
|
14
|
+
desc "list", "List all Marv servers"
|
15
|
+
def list
|
16
|
+
servers = Marv::Global.new(self).servers
|
17
|
+
|
18
|
+
say "Available marv servers:"
|
19
|
+
servers.each do |server|
|
20
|
+
say '- ' + server, :cyan
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Create a new Marv server
|
25
|
+
desc "create SERVER", "Create a Marv server with the specified name"
|
26
|
+
def create(dir)
|
27
|
+
server = Marv::Server::Server.new(self, dir)
|
28
|
+
Marv::Server::Create.new(server)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Start a Marv server
|
32
|
+
desc "start SERVER", "Start the specified Marv server"
|
33
|
+
def start(dir)
|
34
|
+
server = Marv::Server::Server.new(self, dir)
|
35
|
+
action = Marv::Server::Actions.new(server)
|
36
|
+
action.start
|
37
|
+
end
|
38
|
+
|
39
|
+
# Start a Marv server
|
40
|
+
desc "stop SERVER", "Stop the specified Marv server"
|
41
|
+
def stop(dir)
|
42
|
+
server = Marv::Server::Server.new(self, dir)
|
43
|
+
action = Marv::Server::Actions.new(server)
|
44
|
+
action.stop
|
45
|
+
end
|
46
|
+
|
47
|
+
# Start a Marv server
|
48
|
+
desc "restart SERVER", "Restart the specified Marv server"
|
49
|
+
def restart(dir)
|
50
|
+
server = Marv::Server::Server.new(self, dir)
|
51
|
+
action = Marv::Server::Actions.new(server)
|
52
|
+
action.restart
|
53
|
+
end
|
54
|
+
|
55
|
+
# Create a new Marv server
|
56
|
+
desc "remove SERVER", "Remove the specified Marv server"
|
57
|
+
def remove(dir)
|
58
|
+
server = Marv::Server::Server.new(self, dir)
|
59
|
+
action = Marv::Server::Actions.new(server)
|
60
|
+
action.remove
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/lib/marv/global.rb
ADDED
@@ -0,0 +1,285 @@
|
|
1
|
+
module Marv
|
2
|
+
class Global
|
3
|
+
|
4
|
+
attr_accessor :config, :path, :servers, :plugins, :themes, :layouts
|
5
|
+
|
6
|
+
def initialize(task)
|
7
|
+
@task = task
|
8
|
+
|
9
|
+
create_global_folders
|
10
|
+
create_global_config
|
11
|
+
|
12
|
+
@path = global_path
|
13
|
+
@config = global_config
|
14
|
+
@servers = local_servers
|
15
|
+
@plugins = global_plugins
|
16
|
+
@themes = global_themes
|
17
|
+
@layouts = global_layouts
|
18
|
+
|
19
|
+
@task.shell.mute do
|
20
|
+
clean_broken_links(global_projects_paths)
|
21
|
+
link_global_projects
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Global Marv folder path
|
26
|
+
def global_path
|
27
|
+
::File.join(ENV['HOME'], '.marv')
|
28
|
+
end
|
29
|
+
|
30
|
+
# Global config file
|
31
|
+
def config_file
|
32
|
+
::File.join(::File.join(global_path, 'config.rb'))
|
33
|
+
end
|
34
|
+
|
35
|
+
# Load global config file
|
36
|
+
def global_config
|
37
|
+
load_ruby_config(config_file)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Servers folder path
|
41
|
+
def servers_path
|
42
|
+
::File.join(global_path, 'servers')
|
43
|
+
end
|
44
|
+
|
45
|
+
# Local servers array
|
46
|
+
def local_servers
|
47
|
+
@servers = subfolders_basenames(servers_path)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Plugins path
|
51
|
+
def plugins_path
|
52
|
+
::File.join(global_path, 'plugins')
|
53
|
+
end
|
54
|
+
|
55
|
+
# Themes path
|
56
|
+
def themes_path
|
57
|
+
::File.join(global_path, 'themes')
|
58
|
+
end
|
59
|
+
|
60
|
+
# Layouts path
|
61
|
+
def layouts_path
|
62
|
+
::File.join(global_path, 'layouts')
|
63
|
+
end
|
64
|
+
|
65
|
+
# Global themes array
|
66
|
+
def global_themes
|
67
|
+
@themes = subfolders_basenames(themes_path)
|
68
|
+
end
|
69
|
+
|
70
|
+
# Global plugins array
|
71
|
+
def global_plugins
|
72
|
+
@plugins = subfolders_basenames(plugins_path)
|
73
|
+
end
|
74
|
+
|
75
|
+
# Global layouts array
|
76
|
+
def global_layouts
|
77
|
+
@layouts = subfolders_basenames(layouts_path)
|
78
|
+
end
|
79
|
+
|
80
|
+
# Create global folders
|
81
|
+
def create_global_folders
|
82
|
+
@task.shell.mute do
|
83
|
+
create_global_path
|
84
|
+
create_servers_path
|
85
|
+
create_themes_path
|
86
|
+
create_plugins_path
|
87
|
+
create_layouts_path
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
# Create global path
|
92
|
+
def create_global_path
|
93
|
+
unless ::File.directory?(global_path)
|
94
|
+
@task.empty_directory global_path
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
# Create servers path
|
99
|
+
def create_servers_path
|
100
|
+
unless ::File.directory?(servers_path)
|
101
|
+
@task.empty_directory servers_path
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
# Create themes path
|
106
|
+
def create_themes_path
|
107
|
+
unless ::File.directory?(themes_path)
|
108
|
+
@task.empty_directory themes_path
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
# Create plugins path
|
113
|
+
def create_plugins_path
|
114
|
+
unless ::File.directory?(plugins_path)
|
115
|
+
@task.empty_directory plugins_path
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
# Create layouts path
|
120
|
+
def create_layouts_path
|
121
|
+
unless ::File.directory?(layouts_path)
|
122
|
+
@task.empty_directory layouts_path
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
# Server details
|
127
|
+
def ask_server_details
|
128
|
+
options = {}
|
129
|
+
|
130
|
+
if @task.yes?("Do you want to set default server settings?")
|
131
|
+
options[:server_host] = @task.ask "Default host for servers?", :default => "localhost"
|
132
|
+
options[:server_port] = @task.ask "Default port for servers?", :default => "3000"
|
133
|
+
end
|
134
|
+
|
135
|
+
return options
|
136
|
+
end
|
137
|
+
|
138
|
+
# Database details
|
139
|
+
def ask_database_details
|
140
|
+
options = {}
|
141
|
+
|
142
|
+
if @task.yes?("Do you want to set default database settings?")
|
143
|
+
options[:db_user] = @task.ask "Default database username?", :default => "root"
|
144
|
+
options[:db_password] = @task.ask "Default database password?", :default => "root"
|
145
|
+
options[:db_host] = @task.ask "Default database host?", :default => "localhost"
|
146
|
+
options[:db_port] = @task.ask "Default database port?", :default => "3306"
|
147
|
+
end
|
148
|
+
|
149
|
+
return options
|
150
|
+
end
|
151
|
+
|
152
|
+
# Wordpress details
|
153
|
+
def ask_wordpress_details
|
154
|
+
options = {}
|
155
|
+
|
156
|
+
if @task.yes?("Do you want to set default WordPress version?")
|
157
|
+
options[:wp_version] = @task.ask "Default WordPress version?", :default => "latest"
|
158
|
+
end
|
159
|
+
|
160
|
+
return options
|
161
|
+
end
|
162
|
+
|
163
|
+
# Get global options
|
164
|
+
def global_options
|
165
|
+
@options
|
166
|
+
end
|
167
|
+
|
168
|
+
# Ask global options
|
169
|
+
def ask_global_options
|
170
|
+
options = {}
|
171
|
+
|
172
|
+
@task.say "This will create a new global configuration file.", :cyan
|
173
|
+
|
174
|
+
if @task.yes?("Do you want to set default project details?")
|
175
|
+
options[:uri] = @task.ask "Default project URI"
|
176
|
+
options[:author] = @task.ask "Default project author"
|
177
|
+
options[:author_uri] = @task.ask "Default project author URI"
|
178
|
+
options[:license_name] = @task.ask "Default project license name"
|
179
|
+
options[:license_uri] = @task.ask "Default project license URI"
|
180
|
+
end
|
181
|
+
|
182
|
+
options.merge!(ask_server_details)
|
183
|
+
options.merge!(ask_database_details)
|
184
|
+
options.merge!(ask_wordpress_details)
|
185
|
+
|
186
|
+
@options = options
|
187
|
+
end
|
188
|
+
|
189
|
+
# Create global config
|
190
|
+
def create_global_config
|
191
|
+
unless ::File.exists?(config_file)
|
192
|
+
ask_global_options
|
193
|
+
template ::File.join(Marv.root, 'layouts', 'config', 'global.rb'), ::File.join(global_path, 'config.rb'), instance_eval('binding')
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
# Reconfig Marv global options
|
198
|
+
def reconfigure
|
199
|
+
@task.say "This will overwrite your global configuration file.", :cyan
|
200
|
+
|
201
|
+
if @task.yes?("Do you want to continue?")
|
202
|
+
@task.shell.mute do
|
203
|
+
@task.remove_file config_file
|
204
|
+
end
|
205
|
+
|
206
|
+
create_global_folders
|
207
|
+
create_global_config
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
# Global projects paths
|
212
|
+
def global_projects_paths
|
213
|
+
paths = ::Dir.glob(::File.join(plugins_path, '*'))
|
214
|
+
paths = paths + ::Dir.glob(::File.join(themes_path, '*'))
|
215
|
+
|
216
|
+
return paths
|
217
|
+
end
|
218
|
+
|
219
|
+
# Global servers paths
|
220
|
+
def global_servers_paths
|
221
|
+
::Dir.glob(::File.join(servers_path, '*'))
|
222
|
+
end
|
223
|
+
|
224
|
+
# Clean broken global links
|
225
|
+
def clean_broken_links(paths)
|
226
|
+
paths.each do |path|
|
227
|
+
unless ::File.exists?(path)
|
228
|
+
::FileUtils.rm_r path
|
229
|
+
end
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
# Link global projects
|
234
|
+
def link_global_projects
|
235
|
+
global_projects_paths.each do |project|
|
236
|
+
global_servers_paths.each do |server|
|
237
|
+
target = project.gsub(global_path, ::File.join(server, 'wp-content'))
|
238
|
+
@task.create_link target, project unless ::File.exists?(target)
|
239
|
+
end
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
# Load ruby config file
|
244
|
+
def load_ruby_config(file)
|
245
|
+
config = {}
|
246
|
+
|
247
|
+
begin
|
248
|
+
# Config file is just executed as straight ruby
|
249
|
+
eval(::File.read(file))
|
250
|
+
rescue Exception => e
|
251
|
+
@task.say "Error while evaluating config file:"
|
252
|
+
@task.say e.message, :red
|
253
|
+
end
|
254
|
+
|
255
|
+
return config
|
256
|
+
end
|
257
|
+
|
258
|
+
# Parse template from source to destination
|
259
|
+
def template(source, *args, &block)
|
260
|
+
config = args.last.is_a?(Hash) ? args.pop : {}
|
261
|
+
destination = args.first || source.sub(/\.tt$/, '')
|
262
|
+
context = args.last || instance_eval('binding')
|
263
|
+
|
264
|
+
source = ::File.expand_path(@task.find_in_source_paths(source.to_s))
|
265
|
+
|
266
|
+
@task.create_file destination, nil, config do
|
267
|
+
content = ERB.new(::File.binread(source), nil, '-', '@output_buffer').result(context)
|
268
|
+
content = block.call(content) if block
|
269
|
+
content
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
273
|
+
# Get subfolder basenames
|
274
|
+
def subfolders_basenames(folder)
|
275
|
+
subfolders = []
|
276
|
+
|
277
|
+
::Dir.glob(::File.join(folder, '*')).each do |subfolder|
|
278
|
+
subfolders << ::File.basename(subfolder)
|
279
|
+
end
|
280
|
+
|
281
|
+
return subfolders
|
282
|
+
end
|
283
|
+
|
284
|
+
end
|
285
|
+
end
|