marv 0.6.5 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -1
- data/Gemfile +3 -22
- data/Gemfile.lock +63 -92
- data/Rakefile +4 -42
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/{bin → exe}/marv +6 -1
- data/lib/marv.rb +26 -3
- data/lib/marv/cli.rb +10 -3
- data/lib/marv/cli/base.rb +80 -0
- data/lib/marv/cli/project.rb +4 -9
- data/lib/marv/cli/server.rb +18 -21
- data/lib/marv/global.rb +109 -32
- data/lib/marv/project/actions.rb +17 -6
- data/lib/marv/project/builder.rb +14 -7
- data/lib/marv/project/builder/assets.rb +1 -2
- data/lib/marv/project/builder/engines.rb +0 -2
- data/lib/marv/project/create.rb +31 -16
- data/lib/marv/project/guard.rb +2 -2
- data/lib/marv/project/guard/commander.rb +14 -0
- data/lib/marv/project/guard/pry.rb +41 -0
- data/lib/marv/project/project.rb +2 -3
- data/lib/marv/server/actions.rb +75 -35
- data/lib/marv/server/create.rb +37 -14
- data/lib/marv/server/server.rb +26 -18
- data/lib/marv/version.rb +3 -0
- data/pkg/marv-0.6.5.gem +0 -0
- data/pkg/marv-0.7.0.gem +0 -0
- metadata +68 -44
- data/.document +0 -5
- data/VERSION +0 -1
- data/marv.gemspec +0 -156
data/lib/marv/cli/project.rb
CHANGED
@@ -1,14 +1,9 @@
|
|
1
|
+
require 'marv/cli/base'
|
1
2
|
require 'marv/project/project'
|
2
3
|
|
3
4
|
module Marv
|
4
5
|
module CLI
|
5
|
-
class Project <
|
6
|
-
|
7
|
-
def self.source_root
|
8
|
-
::File.expand_path(::File.join(Marv.root, 'layouts'))
|
9
|
-
end
|
10
|
-
|
11
|
-
include Thor::Actions
|
6
|
+
class Project < Base
|
12
7
|
|
13
8
|
# Create a new Marv project
|
14
9
|
desc "create DIRECTORY", "Creates a Marv project into specified directory"
|
@@ -38,7 +33,7 @@ module Marv
|
|
38
33
|
end
|
39
34
|
|
40
35
|
# Build a Marv project to a directory
|
41
|
-
desc "build DIRECTORY", "Build your
|
36
|
+
desc "build DIRECTORY", "Build your project into specified directory"
|
42
37
|
method_option :config, :type => :string, :desc => "Name of alternate config file"
|
43
38
|
def build(dir='build')
|
44
39
|
project = Marv::Project::Project.new(self, '.', options[:config])
|
@@ -58,4 +53,4 @@ module Marv
|
|
58
53
|
|
59
54
|
end
|
60
55
|
end
|
61
|
-
end
|
56
|
+
end
|
data/lib/marv/cli/server.rb
CHANGED
@@ -1,14 +1,9 @@
|
|
1
|
+
require 'marv/cli/base'
|
1
2
|
require 'marv/server/server'
|
2
3
|
|
3
4
|
module Marv
|
4
5
|
module CLI
|
5
|
-
class Server <
|
6
|
-
|
7
|
-
def self.source_root
|
8
|
-
::File.expand_path(::File.join(Marv.root, 'layouts'))
|
9
|
-
end
|
10
|
-
|
11
|
-
include Thor::Actions
|
6
|
+
class Server < Base
|
12
7
|
|
13
8
|
# List all Marv servers
|
14
9
|
desc "list", "List all Marv servers"
|
@@ -16,31 +11,32 @@ module Marv
|
|
16
11
|
servers = Marv::Global.new(self).servers
|
17
12
|
|
18
13
|
if dir == 'all'
|
19
|
-
|
20
|
-
servers.each_with_index do |
|
21
|
-
|
14
|
+
say_info "Available marv servers:", true
|
15
|
+
servers.each_with_index do |server_dir, index|
|
16
|
+
server = Marv::Server::Server.new(self, server_dir)
|
17
|
+
say_message "#{index + 1}. #{server.name} [http://#{server.host}:#{server.port}]", false
|
22
18
|
end
|
23
19
|
|
24
20
|
if servers.empty?
|
25
|
-
|
21
|
+
say_warning "No servers found", false
|
26
22
|
end
|
27
23
|
end
|
28
24
|
|
29
25
|
if dir == 'running'
|
30
26
|
index = 0
|
31
|
-
|
32
|
-
servers.each do |
|
33
|
-
server = Marv::Server::Server.new(self,
|
27
|
+
say_success "Running marv servers:", true
|
28
|
+
servers.each do |server_dir|
|
29
|
+
server = Marv::Server::Server.new(self, server_dir)
|
34
30
|
action = Marv::Server::Actions.new(server)
|
35
31
|
|
36
32
|
if action.is_server_running?
|
37
|
-
|
33
|
+
say_message "#{index + 1}. #{server.name} [http://#{server.host}:#{server.port}]", false
|
38
34
|
index += 1
|
39
35
|
end
|
40
36
|
end
|
41
37
|
|
42
38
|
if index == 0
|
43
|
-
|
39
|
+
say_warning "No running servers found", false
|
44
40
|
end
|
45
41
|
end
|
46
42
|
end
|
@@ -66,8 +62,9 @@ module Marv
|
|
66
62
|
|
67
63
|
# Create server if it does not exist
|
68
64
|
unless ::File.directory?(::File.join(servers_path, dir))
|
69
|
-
|
70
|
-
if
|
65
|
+
say_warning "Server #{dir} does not exist."
|
66
|
+
if said_yes?("Would you like to create the server?")
|
67
|
+
say_empty
|
71
68
|
create(dir)
|
72
69
|
end
|
73
70
|
end
|
@@ -85,8 +82,8 @@ module Marv
|
|
85
82
|
if dir == 'all'
|
86
83
|
servers = Marv::Global.new(self).servers
|
87
84
|
|
88
|
-
servers.each do |
|
89
|
-
server = Marv::Server::Server.new(self,
|
85
|
+
servers.each do |server_dir|
|
86
|
+
server = Marv::Server::Server.new(self, server_dir)
|
90
87
|
action = Marv::Server::Actions.new(server)
|
91
88
|
|
92
89
|
if action.is_server_running?
|
@@ -114,4 +111,4 @@ module Marv
|
|
114
111
|
|
115
112
|
end
|
116
113
|
end
|
117
|
-
end
|
114
|
+
end
|
data/lib/marv/global.rb
CHANGED
@@ -3,11 +3,15 @@ module Marv
|
|
3
3
|
|
4
4
|
attr_accessor :config, :path, :servers, :plugins, :themes, :layouts
|
5
5
|
|
6
|
-
def initialize(task)
|
6
|
+
def initialize(task, from_command=false)
|
7
7
|
@task = task
|
8
8
|
|
9
9
|
create_global_folders
|
10
|
-
|
10
|
+
|
11
|
+
@current = current_options
|
12
|
+
@default = default_options
|
13
|
+
|
14
|
+
generate_config(from_command)
|
11
15
|
|
12
16
|
@path = global_path
|
13
17
|
@config = global_config
|
@@ -22,6 +26,49 @@ module Marv
|
|
22
26
|
end
|
23
27
|
end
|
24
28
|
|
29
|
+
# Generate configuration
|
30
|
+
def generate_config(from_command=false)
|
31
|
+
if from_command
|
32
|
+
::File.exists?(config_file) ? reconfigure : configure(from_command)
|
33
|
+
else
|
34
|
+
configure unless ::File.exists?(config_file)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Default config options
|
39
|
+
def default_options
|
40
|
+
defaults = {
|
41
|
+
:server_host => "localhost",
|
42
|
+
:server_port => "3000",
|
43
|
+
:db_user => "root",
|
44
|
+
:db_password => "root",
|
45
|
+
:db_host => "localhost",
|
46
|
+
:db_port => "3306",
|
47
|
+
:wp_version => "latest",
|
48
|
+
:uri => "https://wordpress.org",
|
49
|
+
:author => username,
|
50
|
+
:author_uri => "https://wordpress.org",
|
51
|
+
:license_name => "GPLv3",
|
52
|
+
:license_uri => "http://www.gnu.org/licenses/gpl.html"
|
53
|
+
}
|
54
|
+
|
55
|
+
defaults.merge(@current)
|
56
|
+
end
|
57
|
+
|
58
|
+
# Get current options
|
59
|
+
def current_options
|
60
|
+
if ::File.exists?(config_file)
|
61
|
+
global_config.reject { |opt| opt.nil? || opt == '' }
|
62
|
+
else
|
63
|
+
{}
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# Get user name
|
68
|
+
def username
|
69
|
+
ENV['USERNAME'] || 'marv'
|
70
|
+
end
|
71
|
+
|
25
72
|
# Global Marv folder path
|
26
73
|
def global_path
|
27
74
|
::File.join(ENV['HOME'], '.marv')
|
@@ -34,7 +81,11 @@ module Marv
|
|
34
81
|
|
35
82
|
# Load global config file
|
36
83
|
def global_config
|
37
|
-
|
84
|
+
if ::File.exists?(config_file)
|
85
|
+
load_ruby_config(config_file)
|
86
|
+
else
|
87
|
+
{}
|
88
|
+
end
|
38
89
|
end
|
39
90
|
|
40
91
|
# Servers folder path
|
@@ -123,13 +174,28 @@ module Marv
|
|
123
174
|
end
|
124
175
|
end
|
125
176
|
|
177
|
+
# Project details
|
178
|
+
def ask_project_details
|
179
|
+
options = {}
|
180
|
+
|
181
|
+
if @task.said_change?("Do you want to set default project details?")
|
182
|
+
options[:uri] = @task.ask_option "Default project URI:", :default => @default[:uri]
|
183
|
+
options[:author] = @task.ask_option "Default project author:", :default => @default[:author]
|
184
|
+
options[:author_uri] = @task.ask_option "Default project author URI:", :default => @default[:author_uri]
|
185
|
+
options[:license_name] = @task.ask_option "Default project license name:", :default => @default[:license_name]
|
186
|
+
options[:license_uri] = @task.ask_option "Default project license URI:", :default => @default[:license_uri]
|
187
|
+
end
|
188
|
+
|
189
|
+
return options
|
190
|
+
end
|
191
|
+
|
126
192
|
# Server details
|
127
193
|
def ask_server_details
|
128
194
|
options = {}
|
129
195
|
|
130
|
-
if @task.
|
131
|
-
options[:server_host] = @task.
|
132
|
-
options[:server_port] = @task.
|
196
|
+
if @task.said_change?("Do you want to set default server settings?")
|
197
|
+
options[:server_host] = @task.ask_option "Default host for servers:", :default => @default[:server_host]
|
198
|
+
options[:server_port] = @task.ask_option "Default port for servers:", :default => @default[:server_port]
|
133
199
|
end
|
134
200
|
|
135
201
|
return options
|
@@ -139,11 +205,11 @@ module Marv
|
|
139
205
|
def ask_database_details
|
140
206
|
options = {}
|
141
207
|
|
142
|
-
if @task.
|
143
|
-
options[:db_user] = @task.
|
144
|
-
options[:db_password] = @task.
|
145
|
-
options[:db_host] = @task.
|
146
|
-
options[:db_port] = @task.
|
208
|
+
if @task.said_change?("Do you want to set default database settings?")
|
209
|
+
options[:db_user] = @task.ask_option "Default database username:", :default => @default[:db_user]
|
210
|
+
options[:db_password] = @task.ask_option "Default database password:", :default => @default[:db_password]
|
211
|
+
options[:db_host] = @task.ask_option "Default database host:", :default => @default[:db_host]
|
212
|
+
options[:db_port] = @task.ask_option "Default database port:", :default => @default[:db_port]
|
147
213
|
end
|
148
214
|
|
149
215
|
return options
|
@@ -153,8 +219,8 @@ module Marv
|
|
153
219
|
def ask_wordpress_details
|
154
220
|
options = {}
|
155
221
|
|
156
|
-
if @task.
|
157
|
-
options[:wp_version] = @task.
|
222
|
+
if @task.said_change?("Do you want to set default WordPress version?")
|
223
|
+
options[:wp_version] = @task.ask_option "Default WordPress version?", :default => @default[:wp_version]
|
158
224
|
end
|
159
225
|
|
160
226
|
return options
|
@@ -167,18 +233,9 @@ module Marv
|
|
167
233
|
|
168
234
|
# Ask global options
|
169
235
|
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
|
236
|
+
options = @default
|
181
237
|
|
238
|
+
options.merge!(ask_project_details)
|
182
239
|
options.merge!(ask_server_details)
|
183
240
|
options.merge!(ask_database_details)
|
184
241
|
options.merge!(ask_wordpress_details)
|
@@ -189,22 +246,43 @@ module Marv
|
|
189
246
|
# Create global config
|
190
247
|
def create_global_config
|
191
248
|
unless ::File.exists?(config_file)
|
249
|
+
@task.shell.mute do
|
250
|
+
layout = ::File.join(Marv.root, 'layouts', 'config', 'global.rb')
|
251
|
+
filepath = ::File.join(global_path, 'config.rb')
|
252
|
+
|
253
|
+
template layout, filepath, instance_eval('binding')
|
254
|
+
end
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
# Configure Marv global options
|
259
|
+
def configure(from_command=false)
|
260
|
+
@task.say_warning "You do not have a global configuration file.", false
|
261
|
+
@task.say_info "This will create a new global configuration file.", true
|
262
|
+
|
263
|
+
if @task.said_change?("Do you want to change the default options?")
|
192
264
|
ask_global_options
|
193
|
-
template ::File.join(Marv.root, 'layouts', 'config', 'global.rb'), ::File.join(global_path, 'config.rb'), instance_eval('binding')
|
194
265
|
end
|
266
|
+
|
267
|
+
@options = @default
|
268
|
+
create_global_config
|
269
|
+
|
270
|
+
@task.say_success "Global configuration created successfully.", !from_command, true
|
195
271
|
end
|
196
272
|
|
197
273
|
# Reconfig Marv global options
|
198
274
|
def reconfigure
|
199
|
-
@task.
|
275
|
+
@task.say_warning "This will overwrite your global configuration file."
|
200
276
|
|
201
|
-
if @task.
|
277
|
+
if @task.said_change?("Do you want to continue?")
|
202
278
|
@task.shell.mute do
|
279
|
+
ask_global_options
|
280
|
+
|
203
281
|
@task.remove_file config_file
|
282
|
+
create_global_config
|
204
283
|
end
|
205
284
|
|
206
|
-
|
207
|
-
create_global_config
|
285
|
+
@task.say_success "Global configuration updated successfully.", false, true
|
208
286
|
end
|
209
287
|
end
|
210
288
|
|
@@ -248,8 +326,7 @@ module Marv
|
|
248
326
|
# Config file is just executed as straight ruby
|
249
327
|
eval(::File.read(file))
|
250
328
|
rescue Exception => e
|
251
|
-
@task.
|
252
|
-
@task.say e.message, :red
|
329
|
+
@task.say_error "Error while evaluating config file:", e.message
|
253
330
|
end
|
254
331
|
|
255
332
|
return config
|
@@ -282,4 +359,4 @@ module Marv
|
|
282
359
|
end
|
283
360
|
|
284
361
|
end
|
285
|
-
end
|
362
|
+
end
|
data/lib/marv/project/actions.rb
CHANGED
@@ -16,22 +16,28 @@ module Marv
|
|
16
16
|
def link(dir)
|
17
17
|
@link_dir = dir
|
18
18
|
|
19
|
+
@task.say_warning "This will link project #{@project.project_id} to server #{dir}."
|
20
|
+
|
19
21
|
link_options
|
20
22
|
link_target
|
23
|
+
|
24
|
+
@task.say_empty
|
21
25
|
create_link
|
22
26
|
end
|
23
27
|
|
24
28
|
# Packgage project
|
25
29
|
def package(filename)
|
26
30
|
@package_name = filename
|
31
|
+
pkg_name = filename || get_package_name
|
27
32
|
|
33
|
+
@task.say_warning "This will package project #{@project.project_id} as #{pkg_name}.zip."
|
28
34
|
create_package
|
29
35
|
end
|
30
36
|
|
31
37
|
# Ask for link details
|
32
38
|
def link_options
|
33
39
|
options = {}
|
34
|
-
options[:folder] = @task.
|
40
|
+
options[:folder] = @task.ask_input "Where do you want to link your project?", :limited_to => ["themes", "plugins"], :default => "themes"
|
35
41
|
|
36
42
|
@link_options = options
|
37
43
|
end
|
@@ -70,8 +76,8 @@ module Marv
|
|
70
76
|
target = link_global unless link_global.nil?
|
71
77
|
|
72
78
|
if target.nil?
|
73
|
-
@task.
|
74
|
-
|
79
|
+
@task.say_error "Destination server does not exist!", nil, false, true
|
80
|
+
abort
|
75
81
|
end
|
76
82
|
|
77
83
|
@link_target = target
|
@@ -88,8 +94,8 @@ module Marv
|
|
88
94
|
begin
|
89
95
|
@task.create_link @link_target, @project.build_path
|
90
96
|
rescue Exception => e
|
91
|
-
@task.
|
92
|
-
|
97
|
+
@task.say_error "An error occured while creating project link", e.message, false. true
|
98
|
+
abort
|
93
99
|
end
|
94
100
|
end
|
95
101
|
|
@@ -115,10 +121,15 @@ module Marv
|
|
115
121
|
# Set the package file name
|
116
122
|
def set_package_filename
|
117
123
|
if @package_name.nil?
|
118
|
-
@package_name =
|
124
|
+
@package_name = get_package_name
|
119
125
|
end
|
120
126
|
end
|
121
127
|
|
128
|
+
# Get package name
|
129
|
+
def get_package_name
|
130
|
+
::File.basename(@project.root)
|
131
|
+
end
|
132
|
+
|
122
133
|
# Built to a temporary directory
|
123
134
|
def build_to_temp_dir
|
124
135
|
@builder.build_project
|
data/lib/marv/project/builder.rb
CHANGED
@@ -35,13 +35,20 @@ module Marv
|
|
35
35
|
|
36
36
|
# Build project to a directory
|
37
37
|
def build_to(dir)
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
38
|
+
@task.say_warning "This will build project #{@project.project_id} in directory #{dir}."
|
39
|
+
|
40
|
+
begin
|
41
|
+
build_project
|
42
|
+
# Remove build directory
|
43
|
+
@task.shell.mute do
|
44
|
+
@task.remove_dir ::File.expand_path(dir)
|
45
|
+
end
|
46
|
+
# Copy files from .watch/build directory
|
47
|
+
@task.directory @project.build_path, ::File.expand_path(dir)
|
48
|
+
rescue Exception => e
|
49
|
+
@task.say_error "There was an error while building the project:", e.message, false
|
50
|
+
abort
|
42
51
|
end
|
43
|
-
# Copy files from .watch/build directory
|
44
|
-
@task.directory @project.build_path, ::File.expand_path(dir)
|
45
52
|
end
|
46
53
|
|
47
54
|
# Clean build directory
|
@@ -53,4 +60,4 @@ module Marv
|
|
53
60
|
|
54
61
|
end
|
55
62
|
end
|
56
|
-
end
|
63
|
+
end
|
@@ -72,8 +72,7 @@ module Marv
|
|
72
72
|
def print_asset_error(asset, message)
|
73
73
|
destination = ::File.join(@project.build_path, asset)
|
74
74
|
|
75
|
-
@task.
|
76
|
-
@task.say message, :red
|
75
|
+
@task.say_error "Error while building #{asset.last}:", message
|
77
76
|
|
78
77
|
@task.shell.mute do
|
79
78
|
@task.create_file destination unless ::File.exists?(destination)
|