theme-juice 0.4.4 → 0.5.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 +17 -16
- data/bin/tj +11 -1
- data/lib/theme-juice.rb +1 -0
- data/lib/theme-juice/cli.rb +106 -86
- data/lib/theme-juice/executor.rb +58 -50
- data/lib/theme-juice/ui.rb +36 -28
- data/lib/theme-juice/utilities.rb +4 -4
- data/lib/theme-juice/version.rb +1 -1
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8faea6ee55d26406a1ec3ad715e843ec0780a2f4
|
4
|
+
data.tar.gz: 42a01a719dc792239ae5b32c34a715eafee59440
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bc48633cb614d435ab717a9013377398d00535e44a6c89b8db0ef1f921154f5d5bf62fe80ee32cac6a3389b5fc60c59fd173ca8fa866003e98a3f4fe661480dc
|
7
|
+
data.tar.gz: 5c993eb4ef4b00f36d5f0585394550d7244e9ac8ee0e105ecf20ec9c3f90bd0f0babaf0976024a4a094ff077417408434f34aeeeaf7c19577f5b8da38d120116
|
data/README.md
CHANGED
@@ -8,21 +8,22 @@ What is it? Theme Juice is a command line interface created to scaffold out a ne
|
|
8
8
|
That`s it!
|
9
9
|
|
10
10
|
## Config
|
11
|
-
Because everybody likes to use different tools, you can create a `tj
|
11
|
+
Because everybody likes to use different tools, you can create a `tj.yml` file (with an optional preceding `.`) that will house all of your theme-specific commands. This allows you to use a streamlined set of commands that will act as aliases to your per-project configuration, as well as starter-theme specific information, such as deployment configuration, etc. For right now, we'll just stick to the `commands` section.
|
12
12
|
|
13
13
|
If you're into [Grunt](https://github.com/gruntjs/grunt), then use it. Prefer [Guard](https://github.com/guard/guard)? Go right ahead. This is obviously relative to the starter theme you use, since you can't exactly use Grunt with a starter theme that doesn't support it. Below is the config that comes baked into [our starter theme](https://github.com/ezekg/theme-juice-starter):
|
14
14
|
|
15
15
|
```yml
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
commands:
|
17
|
+
watch: bundle exec guard
|
18
|
+
server: bundle exec cap
|
19
|
+
vendor: composer
|
20
|
+
install:
|
21
|
+
- composer install
|
21
22
|
```
|
22
23
|
|
23
|
-
_Note: If you use a starter theme that doesn't have a `tj
|
24
|
+
_Note: If you use a starter theme that doesn't have a `tj.yml` file, you'll be prompted through a series of steps in order to create one._
|
24
25
|
|
25
|
-
####
|
26
|
+
#### Command options:
|
26
27
|
| Option | Usage |
|
27
28
|
|:--------- |:----------------------------------------------------------------------------- |
|
28
29
|
| `watch` | Command to be aliased when you run `tj watch` for bulding assets |
|
@@ -89,7 +90,7 @@ tj list # Aliases: sites, show
|
|
89
90
|
```
|
90
91
|
|
91
92
|
### Watching and compiling assets:
|
92
|
-
Use this to watch and compile assets with your preferred build tool, whether that be [Grunt](https://github.com/gruntjs/grunt), [Gulp](https://github.com/gulpjs/gulp), [Guard](https://github.com/guard/guard), or whatever. This is simply a wrapper for whatever command is in your `tj
|
93
|
+
Use this to watch and compile assets with your preferred build tool, whether that be [Grunt](https://github.com/gruntjs/grunt), [Gulp](https://github.com/gulpjs/gulp), [Guard](https://github.com/guard/guard), or whatever. This is simply a wrapper for whatever command is in your `tj.yml` file.
|
93
94
|
```bash
|
94
95
|
tj watch # Aliases: dev, assets
|
95
96
|
```
|
@@ -101,13 +102,13 @@ tj vm # Aliases: vagrant, vvv
|
|
101
102
|
```
|
102
103
|
|
103
104
|
### Managing vendor dependencies:
|
104
|
-
Use this to easily manage your dependencies with [Composer](https://github.com/composer/composer), or whatever other command you set in your `tj
|
105
|
+
Use this to easily manage your dependencies with [Composer](https://github.com/composer/composer), or whatever other command you set in your `tj.yml`. This is a wrapper for whatever command is in your config file.
|
105
106
|
```bash
|
106
107
|
tj vendor # Aliases: deps, dependencies
|
107
108
|
```
|
108
109
|
|
109
110
|
### Managing deployment and migration:
|
110
|
-
Use this to easily manage your deployment and migration with [Capistrano](https://github.com/capistrano/capistrano) (or again, anything else set within your `tj
|
111
|
+
Use this to easily manage your deployment and migration with [Capistrano](https://github.com/capistrano/capistrano) (or again, anything else set within your `tj.yml`). This is just a wrapper for your chosen command.
|
111
112
|
```bash
|
112
113
|
tj server # Aliases: deploy, remote
|
113
114
|
```
|
@@ -124,8 +125,8 @@ alias wpv="wp ssh --host=vagrant"
|
|
124
125
|
## Contributing
|
125
126
|
|
126
127
|
1. First, create an [issue](https://github.com/ezekg/theme-juice-cli/issues) for your proposed feature. If it's a bug fix, go right to step 2.
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
128
|
+
1. [Fork the repository](https://github.com/ezekg/theme-juice-cli/fork).
|
129
|
+
1. Create a new feature branch. (`git checkout -b my-new-feature`)
|
130
|
+
1. Commit your changes. (`git commit -am 'add some feature'`)
|
131
|
+
1. Push to the new branch. (`git push origin my-new-feature`)
|
132
|
+
1. Create a new Pull Request.
|
data/bin/tj
CHANGED
@@ -3,10 +3,20 @@
|
|
3
3
|
|
4
4
|
require "thor"
|
5
5
|
|
6
|
+
Signal.trap "INT" do
|
7
|
+
ThemeJuice::UI.speak "Bye bye!", {
|
8
|
+
color: :yellow,
|
9
|
+
icon: :general,
|
10
|
+
newline: true
|
11
|
+
}
|
12
|
+
|
13
|
+
exit 130
|
14
|
+
end
|
15
|
+
|
6
16
|
begin
|
7
17
|
require_relative "../lib/theme-juice"
|
8
18
|
rescue LoadError => err
|
9
|
-
warn err
|
19
|
+
warn err
|
10
20
|
exit 1
|
11
21
|
end
|
12
22
|
|
data/lib/theme-juice.rb
CHANGED
data/lib/theme-juice/cli.rb
CHANGED
@@ -17,61 +17,6 @@ module ThemeJuice
|
|
17
17
|
class_option :no_colors, type: :boolean, alias: "-nc", desc: "Disable colored output"
|
18
18
|
class_option :vvv_path, type: :string, alias: "-fp", default: nil, desc: "Force path to VVV installation"
|
19
19
|
|
20
|
-
###
|
21
|
-
# Non-Thor commands
|
22
|
-
###
|
23
|
-
no_commands do
|
24
|
-
|
25
|
-
###
|
26
|
-
# Disable unicode characters if flag is passed
|
27
|
-
#
|
28
|
-
# @return {Void}
|
29
|
-
###
|
30
|
-
def use_unicode_chars?
|
31
|
-
::ThemeJuice::Utilities.no_unicode = true if options[:no_unicode]
|
32
|
-
end
|
33
|
-
|
34
|
-
###
|
35
|
-
# Disable unicode characters if flag is passed
|
36
|
-
#
|
37
|
-
# @return {Void}
|
38
|
-
###
|
39
|
-
def use_terminal_colors?
|
40
|
-
::ThemeJuice::Utilities.no_colors = true if options[:no_colors]
|
41
|
-
end
|
42
|
-
|
43
|
-
###
|
44
|
-
# Set VVV path
|
45
|
-
#
|
46
|
-
# @return {Void}
|
47
|
-
###
|
48
|
-
def force_vvv_path?
|
49
|
-
if options[:vvv_path].nil?
|
50
|
-
::ThemeJuice::Utilities.vvv_path = File.expand_path("~/vagrant")
|
51
|
-
else
|
52
|
-
::ThemeJuice::Utilities.vvv_path = options[:vvv_path]
|
53
|
-
::ThemeJuice::UI.notice "You're using a custom VVV path : (#{::ThemeJuice::Utilities.vvv_path})"
|
54
|
-
|
55
|
-
unless ::ThemeJuice::UI.agree? "Is the path correct?"
|
56
|
-
::ThemeJuice::UI.error "Good call. Let's create a working dev environment, not a broken computer. Aborting mission."
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
unless Dir.exist? ::ThemeJuice::Utilities.vvv_path
|
61
|
-
::ThemeJuice::UI.error "Cannot load VVV path (#{::ThemeJuice::Utilities.vvv_path}). Aborting mission before something bad happens."
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
###
|
66
|
-
# Output welcome message
|
67
|
-
#
|
68
|
-
# @return {Void}
|
69
|
-
###
|
70
|
-
def welcome_message
|
71
|
-
::ThemeJuice::UI.success "Welcome to Theme Juice!"
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
20
|
###
|
76
21
|
# Print current version
|
77
22
|
#
|
@@ -83,7 +28,7 @@ module ThemeJuice
|
|
83
28
|
|
84
29
|
::ThemeJuice::UI.speak ::ThemeJuice::VERSION, {
|
85
30
|
color: :green,
|
86
|
-
icon: :
|
31
|
+
icon: :notice
|
87
32
|
}
|
88
33
|
end
|
89
34
|
|
@@ -110,43 +55,36 @@ module ThemeJuice
|
|
110
55
|
def create(site = nil)
|
111
56
|
self.use_terminal_colors?
|
112
57
|
self.use_unicode_chars?
|
113
|
-
|
114
|
-
self.welcome_message
|
115
|
-
|
116
58
|
self.force_vvv_path?
|
117
59
|
|
118
60
|
if options[:site]
|
119
61
|
site = options[:site]
|
120
62
|
end
|
121
63
|
|
64
|
+
# Make sure site name is valid
|
65
|
+
unless site.nil?
|
66
|
+
self.validate_site_name(site)
|
67
|
+
end
|
68
|
+
|
69
|
+
# No errors yet, say hi
|
70
|
+
self.welcome_message
|
71
|
+
|
122
72
|
# Check if user passed all required options through flags
|
123
73
|
if options.length >= 6 || options[:use_defaults]
|
124
|
-
::ThemeJuice::UI.
|
125
|
-
color: [:black, :on_green],
|
126
|
-
icon: :arrow_right,
|
127
|
-
full_width: true
|
128
|
-
}
|
74
|
+
::ThemeJuice::UI.success "Well... looks like you just have everything all figured out, huh?"
|
129
75
|
elsif site.nil?
|
130
76
|
::ThemeJuice::UI.speak "Just a few questions before we begin...", {
|
131
77
|
color: [:black, :on_green],
|
132
|
-
icon: :
|
133
|
-
|
78
|
+
icon: :notice,
|
79
|
+
row: true
|
134
80
|
}
|
135
81
|
else
|
136
|
-
::ThemeJuice::UI.
|
137
|
-
color: [:black, :on_green],
|
138
|
-
icon: :arrow_right,
|
139
|
-
full_width: true
|
140
|
-
}
|
82
|
+
::ThemeJuice::UI.success "Your site name shall be '#{site}'! Just a few more questions before we begin..."
|
141
83
|
end
|
142
84
|
|
143
85
|
# Ask for the Site name if not passed directly
|
144
|
-
site ||= ::ThemeJuice::UI.prompt "What's the site name? (
|
145
|
-
|
146
|
-
# Make sure site name is valid
|
147
|
-
if site.match /[^0-9A-Za-z.\-]/
|
148
|
-
::ThemeJuice::UI.error "Site name contains invalid non-ascii characters. This name is used for creating directories, so that's not gonna work. Aborting mission."
|
149
|
-
end
|
86
|
+
site ||= ::ThemeJuice::UI.prompt "What's the site name? (letters, numbers and dashes only)"
|
87
|
+
self.validate_site_name(site)
|
150
88
|
|
151
89
|
# Bare install?
|
152
90
|
bare_setup ||= options[:bare]
|
@@ -186,21 +124,29 @@ module ThemeJuice
|
|
186
124
|
else
|
187
125
|
::ThemeJuice::UI.speak "Which starter theme would you like to use? (partial name is acceptable)", {
|
188
126
|
color: :blue,
|
189
|
-
icon: :
|
127
|
+
icon: :question
|
190
128
|
}
|
191
129
|
|
192
130
|
choose do |menu|
|
193
|
-
menu.index =
|
194
|
-
|
131
|
+
menu.index = ::ThemeJuice::UI::speak "", {
|
132
|
+
icon: :question,
|
133
|
+
indent: 2,
|
134
|
+
empty: true,
|
135
|
+
quiet: true
|
136
|
+
}
|
137
|
+
|
138
|
+
menu.prompt = ::ThemeJuice::UI::speak "Choose one :", {
|
139
|
+
color: :blue,
|
140
|
+
icon: :question,
|
141
|
+
width: 16,
|
142
|
+
quiet: true
|
143
|
+
}
|
195
144
|
|
196
145
|
themes.each do |theme, repo|
|
197
146
|
menu.choice theme do
|
198
147
|
|
199
148
|
if theme == "theme-juice/theme-juice-starter"
|
200
|
-
::ThemeJuice::UI.
|
201
|
-
color: :green,
|
202
|
-
icon: :arrow_up
|
203
|
-
}
|
149
|
+
::ThemeJuice::UI.success "Awesome choice!"
|
204
150
|
end
|
205
151
|
|
206
152
|
starter_theme = repo
|
@@ -347,8 +293,8 @@ module ThemeJuice
|
|
347
293
|
|
348
294
|
::ThemeJuice::UI.speak "Are you sure you want to delete '#{site}'? (y/N)", {
|
349
295
|
color: [:white, :on_red],
|
350
|
-
icon: :
|
351
|
-
|
296
|
+
icon: :notice,
|
297
|
+
row: true
|
352
298
|
}
|
353
299
|
|
354
300
|
if ::ThemeJuice::UI.agree? "", { color: :red, simple: true }
|
@@ -380,6 +326,7 @@ module ThemeJuice
|
|
380
326
|
def install
|
381
327
|
self.use_terminal_colors?
|
382
328
|
self.use_unicode_chars?
|
329
|
+
self.force_vvv_path?
|
383
330
|
|
384
331
|
::ThemeJuice::Executor::install options[:config]
|
385
332
|
end
|
@@ -396,6 +343,7 @@ module ThemeJuice
|
|
396
343
|
def watch(*commands)
|
397
344
|
self.use_terminal_colors?
|
398
345
|
self.use_unicode_chars?
|
346
|
+
self.force_vvv_path?
|
399
347
|
|
400
348
|
::ThemeJuice::Executor::subcommand "#{__method__}", commands.join(" ")
|
401
349
|
end
|
@@ -412,6 +360,7 @@ module ThemeJuice
|
|
412
360
|
def vendor(*commands)
|
413
361
|
self.use_terminal_colors?
|
414
362
|
self.use_unicode_chars?
|
363
|
+
self.force_vvv_path?
|
415
364
|
|
416
365
|
::ThemeJuice::Executor::subcommand "#{__method__}", commands.join(" ")
|
417
366
|
end
|
@@ -449,5 +398,76 @@ module ThemeJuice
|
|
449
398
|
|
450
399
|
system "cd #{::ThemeJuice::Utilities.vvv_path} && vagrant #{commands.join(" ")}"
|
451
400
|
end
|
401
|
+
|
402
|
+
###
|
403
|
+
# Non-Thor commands
|
404
|
+
###
|
405
|
+
no_commands do
|
406
|
+
|
407
|
+
###
|
408
|
+
# Disable unicode characters if flag is passed
|
409
|
+
#
|
410
|
+
# @return {Void}
|
411
|
+
###
|
412
|
+
def use_unicode_chars?
|
413
|
+
::ThemeJuice::Utilities.no_unicode = true if options[:no_unicode]
|
414
|
+
end
|
415
|
+
|
416
|
+
###
|
417
|
+
# Disable unicode characters if flag is passed
|
418
|
+
#
|
419
|
+
# @return {Void}
|
420
|
+
###
|
421
|
+
def use_terminal_colors?
|
422
|
+
::ThemeJuice::Utilities.no_colors = true if options[:no_colors]
|
423
|
+
end
|
424
|
+
|
425
|
+
###
|
426
|
+
# Set VVV path
|
427
|
+
#
|
428
|
+
# @return {Void}
|
429
|
+
###
|
430
|
+
def force_vvv_path?
|
431
|
+
if options[:vvv_path].nil?
|
432
|
+
::ThemeJuice::Utilities.vvv_path = File.expand_path("~/vagrant")
|
433
|
+
else
|
434
|
+
::ThemeJuice::Utilities.vvv_path = options[:vvv_path]
|
435
|
+
::ThemeJuice::UI.notice "You're using a custom VVV path : (#{::ThemeJuice::Utilities.vvv_path})"
|
436
|
+
|
437
|
+
unless ::ThemeJuice::UI.agree? "Is the path correct?"
|
438
|
+
::ThemeJuice::UI.error "Good call. Let's create a working dev environment, not a broken computer. Aborting mission."
|
439
|
+
end
|
440
|
+
end
|
441
|
+
|
442
|
+
unless Dir.exist? ::ThemeJuice::Utilities.vvv_path
|
443
|
+
::ThemeJuice::UI.error "Cannot load VVV path (#{::ThemeJuice::Utilities.vvv_path}). Aborting mission before something bad happens."
|
444
|
+
end
|
445
|
+
end
|
446
|
+
|
447
|
+
###
|
448
|
+
# Make sure site name is valid
|
449
|
+
#
|
450
|
+
# @param {String} site
|
451
|
+
#
|
452
|
+
# @return {Void}
|
453
|
+
###
|
454
|
+
def validate_site_name(site)
|
455
|
+
site.match /[^0-9A-Za-z.\-]/ do |char|
|
456
|
+
::ThemeJuice::UI.error "Site name contains an invalid character '#{char}'. This name is used for creating directories, so that's not gonna work. Aborting mission."
|
457
|
+
end
|
458
|
+
end
|
459
|
+
|
460
|
+
###
|
461
|
+
# Output welcome message
|
462
|
+
#
|
463
|
+
# @return {Void}
|
464
|
+
###
|
465
|
+
def welcome_message
|
466
|
+
::ThemeJuice::UI.speak "Welcome to Theme Juice!", {
|
467
|
+
color: [:black, :on_green, :bold],
|
468
|
+
row: true
|
469
|
+
}
|
470
|
+
end
|
471
|
+
end
|
452
472
|
end
|
453
473
|
end
|
data/lib/theme-juice/executor.rb
CHANGED
@@ -18,7 +18,7 @@ module ThemeJuice
|
|
18
18
|
|
19
19
|
use_config config_path
|
20
20
|
|
21
|
-
@config["install"].each do |command|
|
21
|
+
@config["commands"]["install"].each do |command|
|
22
22
|
run ["cd #{config_path}", command], false
|
23
23
|
end
|
24
24
|
end
|
@@ -27,19 +27,19 @@ module ThemeJuice
|
|
27
27
|
# Run subcommand from config
|
28
28
|
#
|
29
29
|
# @param {String} subcommand
|
30
|
-
# @param {String}
|
30
|
+
# @param {String} command
|
31
31
|
#
|
32
32
|
# @return {Void}
|
33
33
|
###
|
34
|
-
def subcommand(subcommand,
|
34
|
+
def subcommand(subcommand, command)
|
35
35
|
config_path = File.expand_path(Dir.pwd)
|
36
36
|
|
37
37
|
use_config config_path
|
38
38
|
|
39
|
-
if @config[subcommand]
|
40
|
-
run ["#{@config[subcommand]} #{
|
39
|
+
if @config["commands"][subcommand]
|
40
|
+
run ["#{@config["commands"][subcommand]} #{command}"], false
|
41
41
|
else
|
42
|
-
::ThemeJuice::UI.error "Unable to find '#{subcommand}' command in '#{config_path}/tj
|
42
|
+
::ThemeJuice::UI.error "Unable to find '#{subcommand}' command in '#{config_path}/tj.yml'. Aborting mission."
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
@@ -113,14 +113,14 @@ module ThemeJuice
|
|
113
113
|
::ThemeJuice::UI.success "Setup complete!"
|
114
114
|
::ThemeJuice::UI.speak "In order to finish creating your site, you need to provision Vagrant. Do it now? (y/N)", {
|
115
115
|
color: [:black, :on_blue],
|
116
|
-
icon: :
|
117
|
-
|
116
|
+
icon: :restart,
|
117
|
+
row: true
|
118
118
|
}
|
119
119
|
|
120
120
|
if ::ThemeJuice::UI.agree? "", { simple: true }
|
121
121
|
::ThemeJuice::UI.speak "Restarting VVV...", {
|
122
122
|
color: :yellow,
|
123
|
-
icon: :
|
123
|
+
icon: :general
|
124
124
|
}
|
125
125
|
|
126
126
|
if restart_vagrant
|
@@ -140,6 +140,14 @@ module ThemeJuice
|
|
140
140
|
"Database password: #{@opts[:db_pass]}"
|
141
141
|
]
|
142
142
|
end
|
143
|
+
|
144
|
+
unless OS.windows?
|
145
|
+
::ThemeJuice::UI.notice "Do you want to open up your new site 'http://#{@opts[:dev_url]}' now? (y/N)"
|
146
|
+
|
147
|
+
if ::ThemeJuice::UI.agree? "", { color: :yellow, simple: true }
|
148
|
+
run ["open http://#{@opts[:dev_url]}"]
|
149
|
+
end
|
150
|
+
end
|
143
151
|
else
|
144
152
|
::ThemeJuice::UI.notice "Remember, Vagrant needs to be provisioned before you can use your new site. Exiting..."
|
145
153
|
exit
|
@@ -190,7 +198,7 @@ module ThemeJuice
|
|
190
198
|
if restart
|
191
199
|
::ThemeJuice::UI.speak "Restarting VVV...", {
|
192
200
|
color: :yellow,
|
193
|
-
icon: :
|
201
|
+
icon: :general
|
194
202
|
}
|
195
203
|
|
196
204
|
restart_vagrant
|
@@ -215,7 +223,7 @@ module ThemeJuice
|
|
215
223
|
if sites.empty?
|
216
224
|
::ThemeJuice::UI.speak "Nothing to list. Why haven't you created a site yet?", {
|
217
225
|
color: :yellow,
|
218
|
-
icon: :
|
226
|
+
icon: :general
|
219
227
|
}
|
220
228
|
else
|
221
229
|
::ThemeJuice::UI.list "Your sites :", :green, sites
|
@@ -251,9 +259,9 @@ module ThemeJuice
|
|
251
259
|
def use_config(config_path)
|
252
260
|
|
253
261
|
if config_is_setup? config_path
|
254
|
-
@config = YAML.load_file
|
262
|
+
@config = YAML.load_file(Dir["#{config_path}/*"].select { |f| File.basename(f) =~ /^(\.)?(tj.y(a)?ml)/ }.last)
|
255
263
|
else
|
256
|
-
::ThemeJuice::UI.notice "Unable to find 'tj
|
264
|
+
::ThemeJuice::UI.notice "Unable to find 'tj.yml' file in '#{config_path}'."
|
257
265
|
|
258
266
|
if ::ThemeJuice::UI.agree? "Would you like to create one?"
|
259
267
|
|
@@ -312,7 +320,7 @@ module ThemeJuice
|
|
312
320
|
# @return {Bool}
|
313
321
|
###
|
314
322
|
def config_is_setup?(config_path)
|
315
|
-
|
323
|
+
!Dir["#{config_path}/*"].select { |f| File.basename(f) =~ /^(\.)?(tj.y(a)?ml)/ }.empty?
|
316
324
|
end
|
317
325
|
|
318
326
|
###
|
@@ -400,7 +408,7 @@ module ThemeJuice
|
|
400
408
|
def setup_vvv
|
401
409
|
::ThemeJuice::UI.speak "Installing VVV into '#{File.expand_path("#{::ThemeJuice::Utilities.vvv_path}")}'...", {
|
402
410
|
color: :yellow,
|
403
|
-
icon: :
|
411
|
+
icon: :general
|
404
412
|
}
|
405
413
|
|
406
414
|
run [
|
@@ -420,7 +428,7 @@ module ThemeJuice
|
|
420
428
|
def setup_project_dir
|
421
429
|
::ThemeJuice::UI.speak "Creating project directory tree in '#{@opts[:site_location]}'...", {
|
422
430
|
color: :yellow,
|
423
|
-
icon: :
|
431
|
+
icon: :general
|
424
432
|
}
|
425
433
|
|
426
434
|
run ["mkdir -p #{@opts[:site_location]}"]
|
@@ -437,10 +445,10 @@ module ThemeJuice
|
|
437
445
|
def setup_wildcard_subdomains
|
438
446
|
::ThemeJuice::UI.speak "Setting up wildcard subdomains...", {
|
439
447
|
color: :yellow,
|
440
|
-
icon: :
|
448
|
+
icon: :general
|
441
449
|
}
|
442
450
|
|
443
|
-
open File.expand_path("#{::ThemeJuice::Utilities.vvv_path}/Vagrantfile"), "
|
451
|
+
open File.expand_path("#{::ThemeJuice::Utilities.vvv_path}/Vagrantfile"), "ab+" do |file|
|
444
452
|
file.puts "\n"
|
445
453
|
file.puts "###"
|
446
454
|
file.puts "# Enable wildcard subdomains"
|
@@ -463,7 +471,7 @@ module ThemeJuice
|
|
463
471
|
def setup_dev_site
|
464
472
|
::ThemeJuice::UI.speak "Setting up new development site at '#{@opts[:dev_location]}'...", {
|
465
473
|
color: :yellow,
|
466
|
-
icon: :
|
474
|
+
icon: :general
|
467
475
|
}
|
468
476
|
|
469
477
|
run [
|
@@ -473,7 +481,7 @@ module ThemeJuice
|
|
473
481
|
end
|
474
482
|
|
475
483
|
###
|
476
|
-
# Create tj
|
484
|
+
# Create tj.yml file for theme settings
|
477
485
|
#
|
478
486
|
# @param {String} config_path
|
479
487
|
#
|
@@ -485,21 +493,22 @@ module ThemeJuice
|
|
485
493
|
vendor = ::ThemeJuice::UI.prompt "Vendor command to use", indent: 2, default: "composer"
|
486
494
|
install = ::ThemeJuice::UI.prompt "Commands to run on theme install", indent: 2, default: "composer install"
|
487
495
|
|
488
|
-
File.open "#{config_path}/tj
|
489
|
-
file.puts "
|
490
|
-
file.puts "
|
491
|
-
file.puts "
|
492
|
-
file.puts "
|
496
|
+
File.open "#{config_path}/tj.yml", "wb" do |file|
|
497
|
+
file.puts "commands:"
|
498
|
+
file.puts "\s\swatch: #{watch}"
|
499
|
+
file.puts "\s\sserver: #{server}"
|
500
|
+
file.puts "\s\svendor: #{vendor}"
|
501
|
+
file.puts "\s\sinstall:"
|
493
502
|
file.puts "\s\s\s\s- #{install}"
|
494
503
|
end
|
495
504
|
|
496
505
|
if config_is_setup? config_path
|
497
|
-
::ThemeJuice::UI.speak "Successfully added 'tj
|
506
|
+
::ThemeJuice::UI.speak "Successfully added 'tj.yml' file.", {
|
498
507
|
color: :green,
|
499
|
-
icon: :
|
508
|
+
icon: :general
|
500
509
|
}
|
501
510
|
else
|
502
|
-
::ThemeJuice::UI.error "Could not create 'tj
|
511
|
+
::ThemeJuice::UI.error "Could not create 'tj.yml' file. Make sure you have write capabilities to '#{@opts[:site_location]}'."
|
503
512
|
end
|
504
513
|
end
|
505
514
|
|
@@ -509,14 +518,14 @@ module ThemeJuice
|
|
509
518
|
# @return {Void}
|
510
519
|
###
|
511
520
|
def setup_hosts
|
512
|
-
File.open "#{@opts[:site_location]}/vvv-hosts", "
|
521
|
+
File.open "#{@opts[:site_location]}/vvv-hosts", "wb" do |file|
|
513
522
|
file.puts @opts[:dev_url]
|
514
523
|
end
|
515
524
|
|
516
525
|
if hosts_is_setup?
|
517
526
|
::ThemeJuice::UI.speak "Successfully added 'vvv-hosts' file.", {
|
518
527
|
color: :green,
|
519
|
-
icon: :
|
528
|
+
icon: :general
|
520
529
|
}
|
521
530
|
else
|
522
531
|
::ThemeJuice::UI.error "Could not create 'vvv-hosts' file. Make sure you have write capabilities to '#{@opts[:site_location]}'."
|
@@ -529,7 +538,7 @@ module ThemeJuice
|
|
529
538
|
# @return {Void}
|
530
539
|
###
|
531
540
|
def setup_database
|
532
|
-
File.open File.expand_path("#{::ThemeJuice::Utilities.vvv_path}/database/init-custom.sql"), "
|
541
|
+
File.open File.expand_path("#{::ThemeJuice::Utilities.vvv_path}/database/init-custom.sql"), "ab+" do |file|
|
533
542
|
file.puts "### Begin '#{@opts[:site_name]}'"
|
534
543
|
file.puts "#"
|
535
544
|
file.puts "# This block is automatically generated by ThemeJuice. Do not edit."
|
@@ -543,7 +552,7 @@ module ThemeJuice
|
|
543
552
|
if database_is_setup?
|
544
553
|
::ThemeJuice::UI.speak "Successfully added database to 'init-custom.sql'.", {
|
545
554
|
color: :green,
|
546
|
-
icon: :
|
555
|
+
icon: :general
|
547
556
|
}
|
548
557
|
else
|
549
558
|
::ThemeJuice::UI.error "Could not add database info for '#{@opts[:site_name]}' to 'init-custom.sql'. Make sure you have write capabilities to '#{@opts[:site_location]}'."
|
@@ -556,7 +565,7 @@ module ThemeJuice
|
|
556
565
|
# @return {Void}
|
557
566
|
###
|
558
567
|
def setup_nginx
|
559
|
-
File.open "#{@opts[:site_location]}/vvv-nginx.conf", "
|
568
|
+
File.open "#{@opts[:site_location]}/vvv-nginx.conf", "wb" do |file|
|
560
569
|
file.puts "server {"
|
561
570
|
file.puts "\tlisten 80;"
|
562
571
|
file.puts "\tserver_name .#{@opts[:dev_url]};"
|
@@ -568,7 +577,7 @@ module ThemeJuice
|
|
568
577
|
if nginx_is_setup?
|
569
578
|
::ThemeJuice::UI.speak "Successfully added 'vvv-nginx.conf' file.", {
|
570
579
|
color: :green,
|
571
|
-
icon: :
|
580
|
+
icon: :general
|
572
581
|
}
|
573
582
|
else
|
574
583
|
::ThemeJuice::UI.error "Could not create 'vvv-nginx.conf' file. Make sure you have write capabilities to '#{@opts[:site_location]}'."
|
@@ -581,7 +590,7 @@ module ThemeJuice
|
|
581
590
|
# @return {Void}
|
582
591
|
###
|
583
592
|
def setup_env
|
584
|
-
File.open "#{@opts[:site_location]}/.env.development", "
|
593
|
+
File.open "#{@opts[:site_location]}/.env.development", "wb" do |file|
|
585
594
|
file.puts "DB_NAME=#{@opts[:db_name]}"
|
586
595
|
file.puts "DB_USER=#{@opts[:db_user]}"
|
587
596
|
file.puts "DB_PASSWORD=#{@opts[:db_pass]}"
|
@@ -593,7 +602,7 @@ module ThemeJuice
|
|
593
602
|
if env_is_setup?
|
594
603
|
::ThemeJuice::UI.speak "Successfully added '.env.development' file.", {
|
595
604
|
color: :green,
|
596
|
-
icon: :
|
605
|
+
icon: :general
|
597
606
|
}
|
598
607
|
else
|
599
608
|
::ThemeJuice::UI.error "Could not create '.env.development' file. Make sure you have write capabilities to '#{@opts[:site_location]}'."
|
@@ -610,7 +619,7 @@ module ThemeJuice
|
|
610
619
|
def setup_wordpress
|
611
620
|
::ThemeJuice::UI.speak "Setting up WordPress...", {
|
612
621
|
color: :yellow,
|
613
|
-
icon: :
|
622
|
+
icon: :general
|
614
623
|
}
|
615
624
|
|
616
625
|
unless @opts[:bare_setup]
|
@@ -629,10 +638,10 @@ module ThemeJuice
|
|
629
638
|
def install_theme_dependencies
|
630
639
|
::ThemeJuice::UI.speak "Installing theme dependencies...", {
|
631
640
|
color: :yellow,
|
632
|
-
icon: :
|
641
|
+
icon: :general
|
633
642
|
}
|
634
643
|
|
635
|
-
@config["install"].each do |command|
|
644
|
+
@config["commands"]["install"].each do |command|
|
636
645
|
run ["cd #{@opts[:site_location]}", command], false
|
637
646
|
end
|
638
647
|
end
|
@@ -645,10 +654,10 @@ module ThemeJuice
|
|
645
654
|
def setup_synced_folder
|
646
655
|
::ThemeJuice::UI.speak "Syncing host theme directory '#{@opts[:site_location]}' with VM theme directory '/srv/www/tj-#{@opts[:site_name]}'...", {
|
647
656
|
color: :yellow,
|
648
|
-
icon: :
|
657
|
+
icon: :general
|
649
658
|
}
|
650
659
|
|
651
|
-
open File.expand_path("#{::ThemeJuice::Utilities.vvv_path}/Vagrantfile"), "
|
660
|
+
open File.expand_path("#{::ThemeJuice::Utilities.vvv_path}/Vagrantfile"), "ab+" do |file|
|
652
661
|
file.puts "### Begin '#{@opts[:site_name]}'"
|
653
662
|
file.puts "#"
|
654
663
|
file.puts "# This block is automatically generated by ThemeJuice. Do not edit."
|
@@ -670,7 +679,7 @@ module ThemeJuice
|
|
670
679
|
def setup_repo
|
671
680
|
::ThemeJuice::UI.speak "Setting up Git repository at '#{@opts[:repository]}'...", {
|
672
681
|
color: :yellow,
|
673
|
-
icon: :
|
682
|
+
icon: :general
|
674
683
|
}
|
675
684
|
|
676
685
|
if repo_is_setup?
|
@@ -693,7 +702,7 @@ module ThemeJuice
|
|
693
702
|
# @return {Void}
|
694
703
|
###
|
695
704
|
def setup_wpcli
|
696
|
-
File.open "#{@opts[:site_location]}/wp-cli.local.yml", "
|
705
|
+
File.open "#{@opts[:site_location]}/wp-cli.local.yml", "ab+" do |file|
|
697
706
|
file.puts "require:"
|
698
707
|
file.puts "\t- vendor/autoload.php"
|
699
708
|
file.puts "ssh:"
|
@@ -707,7 +716,7 @@ module ThemeJuice
|
|
707
716
|
if wpcli_is_setup?
|
708
717
|
::ThemeJuice::UI.speak "Successfully added ssh settings to 'wp-cli.local.yml' file.", {
|
709
718
|
color: :green,
|
710
|
-
icon: :
|
719
|
+
icon: :general
|
711
720
|
}
|
712
721
|
else
|
713
722
|
::ThemeJuice::UI.error "Could not create 'wp-cli.local.yml' file. Make sure you have write capabilities to '#{@opts[:site_location]}'."
|
@@ -728,8 +737,8 @@ module ThemeJuice
|
|
728
737
|
|
729
738
|
if run ["rm -rf #{@opts[:dev_location]}"]
|
730
739
|
::ThemeJuice::UI.speak "VVV installation for '#{@opts[:site_name]}' successfully removed.", {
|
731
|
-
color: :
|
732
|
-
icon: :
|
740
|
+
color: :yellow,
|
741
|
+
icon: :general
|
733
742
|
}
|
734
743
|
else
|
735
744
|
::ThemeJuice::UI.error "Theme '#{@opts[:site_name]}' could not be removed. Make sure you have write capabilities to '#{@opts[:dev_location]}'."
|
@@ -745,7 +754,7 @@ module ThemeJuice
|
|
745
754
|
if remove_traces_from_file "#{::ThemeJuice::Utilities.vvv_path}/database/init-custom.sql"
|
746
755
|
::ThemeJuice::UI.speak "Database for '#{@opts[:site_name]}' successfully removed.", {
|
747
756
|
color: :yellow,
|
748
|
-
icon: :
|
757
|
+
icon: :general
|
749
758
|
}
|
750
759
|
end
|
751
760
|
end
|
@@ -759,7 +768,7 @@ module ThemeJuice
|
|
759
768
|
if remove_traces_from_file "#{::ThemeJuice::Utilities.vvv_path}/Vagrantfile"
|
760
769
|
::ThemeJuice::UI.speak "Synced folders for '#{@opts[:site_name]}' successfully removed.", {
|
761
770
|
color: :yellow,
|
762
|
-
icon: :
|
771
|
+
icon: :general
|
763
772
|
}
|
764
773
|
end
|
765
774
|
end
|
@@ -783,8 +792,7 @@ module ThemeJuice
|
|
783
792
|
# Move temp file to actual file location
|
784
793
|
FileUtils.mv output_file, File.expand_path(input_file)
|
785
794
|
rescue LoadError => err
|
786
|
-
|
787
|
-
exit 1
|
795
|
+
::ThemeJuice::UI.error "#{err}"
|
788
796
|
ensure
|
789
797
|
# Make sure that the tempfile closes and is cleaned up, regardless of errors
|
790
798
|
output_file.close
|
data/lib/theme-juice/ui.rb
CHANGED
@@ -3,17 +3,14 @@
|
|
3
3
|
module ThemeJuice
|
4
4
|
module UI
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
BLOCK_LARGE = "\u2588"
|
15
|
-
BLOCK_MED = "\u258D"
|
16
|
-
BLOCK_SMALL = "\u258F"
|
6
|
+
# List of icons
|
7
|
+
SUCCESS = "\u2713"
|
8
|
+
ERROR = "\u2191"
|
9
|
+
NOTICE = "\u2192"
|
10
|
+
QUESTION = "\u003F"
|
11
|
+
GENERAL = "\u002D"
|
12
|
+
RESTART = "\u21AA"
|
13
|
+
LIST = "\u2022"
|
17
14
|
|
18
15
|
class << self
|
19
16
|
include ::Thor::Actions
|
@@ -31,7 +28,7 @@ module ThemeJuice
|
|
31
28
|
format_message! message, opts
|
32
29
|
|
33
30
|
# Check if we're suppressing terminal output
|
34
|
-
if opts.key? :
|
31
|
+
if opts.key? :quiet
|
35
32
|
message
|
36
33
|
else
|
37
34
|
say message
|
@@ -48,7 +45,8 @@ module ThemeJuice
|
|
48
45
|
def success(message)
|
49
46
|
self.speak message, {
|
50
47
|
color: [:black, :on_green, :bold],
|
51
|
-
|
48
|
+
icon: :success,
|
49
|
+
row: true
|
52
50
|
}
|
53
51
|
end
|
54
52
|
|
@@ -62,8 +60,8 @@ module ThemeJuice
|
|
62
60
|
def notice(message)
|
63
61
|
self.speak message, {
|
64
62
|
color: [:black, :on_yellow],
|
65
|
-
icon: :
|
66
|
-
|
63
|
+
icon: :notice,
|
64
|
+
row: true
|
67
65
|
}
|
68
66
|
end
|
69
67
|
|
@@ -78,8 +76,8 @@ module ThemeJuice
|
|
78
76
|
def error(message)
|
79
77
|
self.speak message, {
|
80
78
|
color: [:white, :on_red],
|
81
|
-
icon: :
|
82
|
-
|
79
|
+
icon: :error,
|
80
|
+
row: true
|
83
81
|
}
|
84
82
|
|
85
83
|
yield if block_given?
|
@@ -99,14 +97,14 @@ module ThemeJuice
|
|
99
97
|
def list(header, color, list)
|
100
98
|
self.speak header, {
|
101
99
|
color: [:black, :"on_#{color}"],
|
102
|
-
icon: :
|
103
|
-
|
100
|
+
icon: :notice,
|
101
|
+
row: true
|
104
102
|
}
|
105
103
|
|
106
104
|
list.each do |item|
|
107
105
|
self.speak item, {
|
108
106
|
color: :"#{color}",
|
109
|
-
icon: :
|
107
|
+
icon: :general
|
110
108
|
}
|
111
109
|
end
|
112
110
|
end
|
@@ -122,7 +120,7 @@ module ThemeJuice
|
|
122
120
|
def prompt(question, *opts)
|
123
121
|
format_message! question, {
|
124
122
|
color: :blue,
|
125
|
-
icon: :
|
123
|
+
icon: :question
|
126
124
|
}
|
127
125
|
|
128
126
|
opts.each do |opt|
|
@@ -159,7 +157,7 @@ module ThemeJuice
|
|
159
157
|
|
160
158
|
format_message! question, {
|
161
159
|
color: opts[:color],
|
162
|
-
icon: :
|
160
|
+
icon: :question
|
163
161
|
}
|
164
162
|
|
165
163
|
if opts.key? :simple
|
@@ -181,28 +179,38 @@ module ThemeJuice
|
|
181
179
|
###
|
182
180
|
def format_message!(message, opts = {})
|
183
181
|
|
184
|
-
# Check if we're using an icon
|
185
182
|
unless ::ThemeJuice::Utilities.no_unicode
|
186
183
|
if opts.key? :icon
|
187
|
-
|
184
|
+
if opts.key? :empty
|
185
|
+
set!(message) { |msg| " #{self.const_get(opts[:icon].to_s.upcase)}" }
|
186
|
+
else
|
187
|
+
set!(message) { |msg| " #{self.const_get(opts[:icon].to_s.upcase)} " << msg }
|
188
|
+
end
|
188
189
|
else
|
189
190
|
set!(message) { |msg| " " << msg }
|
190
191
|
end
|
191
192
|
end
|
192
193
|
|
193
|
-
|
194
|
-
|
195
|
-
|
194
|
+
if opts.key? :indent
|
195
|
+
set!(message) { |str| (" " * opts[:indent]) << str }
|
196
|
+
end
|
197
|
+
|
198
|
+
if opts.key? :row
|
196
199
|
set!(message) { |msg| msg.ljust(terminal_width) }
|
200
|
+
elsif opts.key? :width
|
201
|
+
set!(message) { |msg| msg.ljust(opts[:width]) }
|
197
202
|
end
|
198
203
|
|
199
|
-
# Check if we're using colors
|
200
204
|
unless ::ThemeJuice::Utilities.no_colors
|
201
205
|
if opts.key? :color
|
202
206
|
set!(message) { |msg| set_color(msg, *opts[:color]) }
|
203
207
|
end
|
204
208
|
end
|
205
209
|
|
210
|
+
if opts.key? :newline
|
211
|
+
set!(message) { |msg| "\n" << msg }
|
212
|
+
end
|
213
|
+
|
206
214
|
message
|
207
215
|
end
|
208
216
|
|
@@ -40,14 +40,14 @@ module ThemeJuice
|
|
40
40
|
if ::Gem::Version.new(local_version) < ::Gem::Version.new(remote_version)
|
41
41
|
::ThemeJuice::UI.speak "Your version of Theme Juice (#{local_version}) is outdated. There is a newer version (#{remote_version}) available. Please update now.", {
|
42
42
|
color: [:black, :on_yellow],
|
43
|
-
icon: :
|
44
|
-
|
43
|
+
icon: :notice,
|
44
|
+
row: true
|
45
45
|
}
|
46
46
|
else
|
47
47
|
::ThemeJuice::UI.speak "Your version of Theme Juice (#{local_version}) up to date.", {
|
48
48
|
color: [:black, :on_green],
|
49
|
-
icon: :
|
50
|
-
|
49
|
+
icon: :notice,
|
50
|
+
row: true
|
51
51
|
}
|
52
52
|
end
|
53
53
|
end
|
data/lib/theme-juice/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: theme-juice
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ezekiel Gabrielse
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: highline
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: thor
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -25,7 +39,7 @@ dependencies:
|
|
25
39
|
- !ruby/object:Gem::Version
|
26
40
|
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
42
|
+
name: os
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
45
|
- - '>='
|