theme-juice 0.4.4 → 0.5.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/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
|
- - '>='
|