swiftly 4.0.1 → 5.0.1
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 +196 -0
- data/bin/swiftly +1 -0
- data/lib/swiftly/cli.rb +0 -6
- data/lib/swiftly/config.rb +122 -37
- data/lib/swiftly/config_project_generator.rb +1 -1
- data/lib/swiftly/create.rb +1 -2
- data/lib/swiftly/create_wordpress.rb +11 -8
- data/lib/swiftly/database.rb +1 -1
- data/lib/swiftly/definition_proxy.rb +17 -0
- data/lib/swiftly/destroy.rb +1 -0
- data/lib/swiftly/factory.rb +20 -0
- data/lib/swiftly/init.rb +1 -1
- data/lib/swiftly/packages.rb +22 -2
- data/lib/swiftly/project.rb +102 -61
- data/lib/swiftly/resolver.rb +72 -0
- data/lib/swiftly/server.rb +17 -0
- data/lib/swiftly/smokestack.rb +37 -0
- data/lib/swiftly/templates/config_project.erb +17 -11
- data/lib/swiftly/templates/swiftlyfile.erb +23 -21
- data/lib/swiftly/version.rb +1 -1
- metadata +8 -5
- data/Dropbox/Development/www/Swiftlyfile +0 -8
- data/lib/swiftly/generate.rb +0 -23
- data/lib/swiftly/generate_post_type.rb +0 -50
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d783503de636e427ab81750c033953513ab53d95
|
4
|
+
data.tar.gz: 1d4b754bc088690b9513dbabf2253cd7a04b4c17
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7c56d006554c3d79b436ce5bdc4a58da4a012b93f8d6ca1896c7c18b1a1092fc0fd6ad30a39660c92dbc0443f55c51192b100b181fbd14f01c7f02bde06bc335
|
7
|
+
data.tar.gz: 9dabc4f9bba3c91d6916dd712e4d17cfa82d5908a2ddd6af74c36f8f7b102242f892926ecaa7a6e540db731ed71f91b10a4e5396b861529a16cd95915a57131b
|
data/README.md
ADDED
@@ -0,0 +1,196 @@
|
|
1
|
+
# Swiftly 5.0.1 (formally known as Obi)
|
2
|
+
|
3
|
+
Swiftly is a web development project management tool.
|
4
|
+
|
5
|
+
## Features
|
6
|
+
|
7
|
+
1. Create projects swiftly on the fly
|
8
|
+
2. Deploy to multiple environments. Deployment is managed by [mina](https://github.com/mina-deploy/mina)
|
9
|
+
3. Will also push database to server while performing a find and replace on URLs
|
10
|
+
4. Backs up destination database on each push
|
11
|
+
5. Allows for rollback of database and files in the event that it becomes necessary
|
12
|
+
6. And much much more...
|
13
|
+
|
14
|
+
## Getting started
|
15
|
+
|
16
|
+
$ gem install swiftly
|
17
|
+
|
18
|
+
Run it:
|
19
|
+
|
20
|
+
$ swiftly <command> <args>
|
21
|
+
|
22
|
+
## Requirements
|
23
|
+
|
24
|
+
Mysql must be in your $PATH. You can check this by running:
|
25
|
+
|
26
|
+
$ which mysql
|
27
|
+
|
28
|
+
This should yield something like:
|
29
|
+
|
30
|
+
$ /opt/boxen/homebrew/bin/mysql
|
31
|
+
|
32
|
+
If nothing is displayed after running `which mysql` then you need to add it manually by running the following.
|
33
|
+
|
34
|
+
***Note that everything between `PATH=` and `:$PATH` in the command below, needs to be the absolute path to your mysql.***
|
35
|
+
|
36
|
+
$ echo 'export PATH=/usr/local/mysql/bin:$PATH' >> ~/.bash_profile && source ~/.bash_profile
|
37
|
+
|
38
|
+
If all goes correctly, you should be able to run `which mysql` again, and it should yield the location of your mysql.
|
39
|
+
|
40
|
+
## Usage
|
41
|
+
|
42
|
+
Running `swiftly init` will walk you through setting up the basic settings necessary to get swiftly up and running.
|
43
|
+
|
44
|
+
$ swiftly init
|
45
|
+
|
46
|
+
At this point you will be able to run `swiftly help` to get a list of commands and their arguments in order to interact with swiftly.
|
47
|
+
|
48
|
+
$ swiftly help
|
49
|
+
|
50
|
+
Once you complete the interactive setup, a "Swiftlyfile" will be created in your sites directory. This file will contain your local settings and will look something like this:
|
51
|
+
|
52
|
+
~~~ruby
|
53
|
+
|
54
|
+
set :server, :type => :local do
|
55
|
+
|
56
|
+
db_host 'localhost'
|
57
|
+
db_user 'root'
|
58
|
+
db_pass 'supersecurepassword'
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
~~~
|
63
|
+
|
64
|
+
The "Swiftlyfile" is used as a global config for your different server settings.
|
65
|
+
|
66
|
+
Currently the only server types that are recognized by swiftly are `:local`, `:staging`, and `:production`. *Eventually swiftly will allow for user specified server types!*
|
67
|
+
|
68
|
+
The `:staging` and `:production` server type settings can be overridden locally by adding a `config/config.rb` file in the root directory of an individual project. These server types except more parameters than just `db_host`, `db_user`, and `db_name` which are required in order to manage each project. Below is an example of a `config/config.rb` file using all possible parameters.
|
69
|
+
|
70
|
+
~~~ruby
|
71
|
+
|
72
|
+
set :server, :type => :staging do
|
73
|
+
|
74
|
+
db_host 'localhost'
|
75
|
+
db_user 'root'
|
76
|
+
db_pass 'supersecurepassword'
|
77
|
+
repo 'git@bitbucket.org:micalexander/micalexander.git'
|
78
|
+
branch 'master'
|
79
|
+
ssh_path '/var/www/micalexander_micalexander_com'
|
80
|
+
ssh_user 'username'
|
81
|
+
domain 'http://micalexander.micalexander.com'
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
set :server, :type => :production do
|
86
|
+
|
87
|
+
db_host 'localhost'
|
88
|
+
db_user 'root'
|
89
|
+
db_pass 'supersecurepassword'
|
90
|
+
repo 'git@bitbucket.org:micalexander/micalexander.git'
|
91
|
+
branch 'master'
|
92
|
+
ssh_path '/var/www/micalexander_com'
|
93
|
+
ssh_user 'username'
|
94
|
+
domain 'micalexander.com'
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
~~~
|
99
|
+
|
100
|
+
## Projects
|
101
|
+
|
102
|
+
Swiftly currently supports three types of projects, an `empty`, a `git` enabled, and a `wordpress` (git enabled) project.
|
103
|
+
|
104
|
+
Example folder structure:
|
105
|
+
|
106
|
+
~~~ruby
|
107
|
+
|
108
|
+
project-name
|
109
|
+
|
|
110
|
+
|-- _resources // Not required. Opinionated organization
|
111
|
+
| |
|
112
|
+
| |-- assets
|
113
|
+
| |
|
114
|
+
| |-- architecture
|
115
|
+
| |-- doc
|
116
|
+
| |-- emails
|
117
|
+
| |-- fonts
|
118
|
+
| |-- images
|
119
|
+
| |-- raster
|
120
|
+
| |-- vector
|
121
|
+
|
|
122
|
+
|-- _backups // Required for automated backups of environments
|
123
|
+
| |
|
124
|
+
| |-- local
|
125
|
+
| |-- production
|
126
|
+
| |-- staging
|
127
|
+
| |-- temp
|
128
|
+
|
|
129
|
+
|-- .git // Not required but a good idea
|
130
|
+
| |
|
131
|
+
| |-- ...
|
132
|
+
|
|
133
|
+
|-- .gitignore // Not required but a good
|
134
|
+
|
|
135
|
+
|-- config // Required for project specific settings
|
136
|
+
|
|
137
|
+
|-- config.rb // Required for project specific settings
|
138
|
+
~~~
|
139
|
+
|
140
|
+
The above gives you an idea of what to expect when creating a project.
|
141
|
+
|
142
|
+
To create a project you can simply run:
|
143
|
+
|
144
|
+
$ swiftly create [project_type] [project_name]
|
145
|
+
|
146
|
+
An `empty` project will include the structure in the diagram above with the exception of the .git directory, the .gitignore.
|
147
|
+
|
148
|
+
A `git` project will include everything in the diagram above.
|
149
|
+
|
150
|
+
A `wordpress` project will include everything in the diagram above with the addition of a full Wordpress installation.
|
151
|
+
|
152
|
+
## Wordpress
|
153
|
+
|
154
|
+
To install Wordpress as a project run the following command replacing "[project_name]" with your desired project name.
|
155
|
+
|
156
|
+
$ swiftly create wordpress [project_name]
|
157
|
+
|
158
|
+
This will download Wordpress into a folder named "[project_name]", setup the Wordpress database for you, and automatically install a theme for you named "[project_name]".
|
159
|
+
|
160
|
+
By default the theme that will be installed into Wordpress will be [mask](https://github.com/micalexander/mask). This is because swiftly requires a customized "wp-config.php" file in order to setup the databases and manage the push and pulling of environments.
|
161
|
+
|
162
|
+
When using the customized "wp-config.php" file you will not need to include the `db_host`, `db_user`, `db_name` and `domain` parameters in the `config/config.rb` file. Doing so will override the "wp-config.php" file settings.
|
163
|
+
|
164
|
+
### Themes
|
165
|
+
|
166
|
+
You can tell swiftly what theme to use by following the syntax below. Keep in mind that your theme structure must match that of the [mask](https://github.com/micalexander/mask) theme in order for things to run smoothly.
|
167
|
+
|
168
|
+
The location parameter accepts a URL to a zip or a file path to a folder.
|
169
|
+
|
170
|
+
***Note the status parameter is set to `:disabled`, therefore it will be ignored and not installed. In order to have swiftly install this theme, remove the status altogether or set it to `:enabled`.***
|
171
|
+
|
172
|
+
~~~ruby
|
173
|
+
set :package, :type => :template do
|
174
|
+
name 'mask'
|
175
|
+
location 'https://github.com/micalexander/mask/archive/master.zip'
|
176
|
+
status :disabled
|
177
|
+
end
|
178
|
+
~~~
|
179
|
+
|
180
|
+
### Plugins
|
181
|
+
|
182
|
+
You can tell swiftly what plugin to use by following the syntax below.
|
183
|
+
|
184
|
+
The location parameter accepts a URL to a zip or a file path to a folder.
|
185
|
+
|
186
|
+
***Note the status parameter is set to `:disabled`, therefore it will be ignored and not installed. In order to have swiftly install this plugin, remove the status altogether or set it to `:enabled`.***
|
187
|
+
|
188
|
+
~~~ruby
|
189
|
+
set :package, :type => :plugin do
|
190
|
+
name 'advanced-custom-fields-pro'
|
191
|
+
location '/Users/username/plugins'
|
192
|
+
status :disabled
|
193
|
+
end
|
194
|
+
~~~
|
195
|
+
|
196
|
+
*More examples coming...*
|
data/bin/swiftly
CHANGED
@@ -12,4 +12,5 @@ Swiftly::Init.start unless File.exist? File.join( Dir.home, ".swiftly" )
|
|
12
12
|
global_config = YAML.load_file File.join( Dir.home, ".swiftly" ) unless !File.exists? File.join( Dir.home, ".swiftly" )
|
13
13
|
|
14
14
|
Swiftly::Init.start unless File.exist? File.join( global_config[:sites_path], "Swiftlyfile" )
|
15
|
+
|
15
16
|
Swiftly::CLI.start unless !File.exist? File.join( global_config[:sites_path], "Swiftlyfile" )
|
data/lib/swiftly/cli.rb
CHANGED
@@ -3,15 +3,12 @@ require 'json'
|
|
3
3
|
require 'swiftly/app_module'
|
4
4
|
require 'swiftly/config'
|
5
5
|
require 'swiftly/create'
|
6
|
-
require 'swiftly/configure'
|
7
6
|
require 'swiftly/push'
|
8
7
|
require 'swiftly/pull'
|
9
8
|
require 'swiftly/ssh'
|
10
9
|
require 'swiftly/clean'
|
11
10
|
require 'swiftly/setup'
|
12
11
|
require 'swiftly/rollback'
|
13
|
-
require 'swiftly/generate'
|
14
|
-
require 'swiftly/enable'
|
15
12
|
require 'swiftly/destroy'
|
16
13
|
|
17
14
|
module Swiftly
|
@@ -21,15 +18,12 @@ module Swiftly
|
|
21
18
|
include Helpers
|
22
19
|
|
23
20
|
register Swiftly::Create, "create", "create COMMAND PROJECT_NAME", "Create projects by passing a project name"
|
24
|
-
register Swiftly::Configure, "configure", "configure COMMAND", "Configure settings"
|
25
21
|
register Swiftly::Setup, "setup", "setup COMMAND PROJECT_NAME", "Setup [environment] on server"
|
26
22
|
register Swiftly::Push, "push", "push COMMAND PROJECT_NAME", "Push [environment] database and files to server"
|
27
23
|
register Swiftly::Pull, "pull", "pull COMMAND PROJECT_NAME", "Pull [environment] database and files to local"
|
28
24
|
register Swiftly::Rollback, "rollback", "rollback COMMAND PROJECT_NAME", "Rollback the [environment] database and files on server"
|
29
25
|
register Swiftly::SSH, "ssh", "ssh COMMAND PROJECT_NAME", "SSH into the [environment] server and cd into site path"
|
30
26
|
register Swiftly::Clean, "clean", "clean COMMAND PROJECT_NAME", "Clean the [environment] releases on server"
|
31
|
-
register Swiftly::Generate, "generate", "generate POSTTYPE FILTER PROJECT_NAME", "Generate a custom post type"
|
32
|
-
register Swiftly::Enable, "enable", "enable COMMAND FRAMEWORK", "Enable global framework intergrations"
|
33
27
|
register Swiftly::Destroy, "destroy", "destroy PROJECT_NAME", "Destroy local project!"
|
34
28
|
|
35
29
|
end
|
data/lib/swiftly/config.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
require 'swiftly/version'
|
3
3
|
require 'swiftly/app_module'
|
4
|
+
require 'swiftly/smokestack'
|
5
|
+
require 'swiftly/resolver'
|
4
6
|
|
5
7
|
module Swiftly
|
6
8
|
class Config < Thor
|
@@ -41,10 +43,10 @@ module Swiftly
|
|
41
43
|
|
42
44
|
File.join(
|
43
45
|
global_config[:sites_path],
|
44
|
-
project_name, 'config', 'config.
|
46
|
+
project_name, 'config', 'config.rb'
|
45
47
|
) unless !File.exists? File.join(
|
46
48
|
global_config[:sites_path],
|
47
|
-
project_name, 'config', 'config.
|
49
|
+
project_name, 'config', 'config.rb'
|
48
50
|
)
|
49
51
|
|
50
52
|
end
|
@@ -65,67 +67,150 @@ module Swiftly
|
|
65
67
|
|
66
68
|
end
|
67
69
|
|
68
|
-
def self.
|
70
|
+
def self.set setting, *args, &block
|
69
71
|
|
70
|
-
|
71
|
-
when :wp_config
|
72
|
+
Swiftly::Smokestack.define do
|
72
73
|
|
73
|
-
|
74
|
+
factory setting, &block
|
74
75
|
|
75
|
-
|
76
|
-
wp_local = File.read(
|
77
|
-
wp_config_file(
|
78
|
-
project_name
|
79
|
-
)
|
80
|
-
)[/\$local\s*?=[\s|\S]*?({[\s|\S]*?})/, 1]
|
76
|
+
end
|
81
77
|
|
82
|
-
|
83
|
-
wp_config_file(
|
84
|
-
project_name
|
85
|
-
)
|
86
|
-
)[/\$staging\s*?=[\s|\S]*?({[\s|\S]*?})/, 1]
|
78
|
+
Swiftly::Resolver.load setting, args[0][:type], Swiftly::Smokestack.build( setting )
|
87
79
|
|
88
|
-
|
89
|
-
wp_config_file(
|
90
|
-
project_name
|
91
|
-
)
|
92
|
-
)[/\$production\s*?=[\s|\S]*?({[\s|\S]*?})/, 1]
|
80
|
+
end
|
93
81
|
|
94
|
-
|
82
|
+
def self.load file, project_name = nil
|
95
83
|
|
96
|
-
|
97
|
-
|
98
|
-
staging: {},
|
99
|
-
production: {}
|
100
|
-
}
|
84
|
+
case file
|
85
|
+
when :wp_config
|
101
86
|
|
102
|
-
|
87
|
+
wp_config_parse project_name
|
103
88
|
|
104
|
-
load_hash = {
|
105
|
-
local: JSON.parse(wp_local).inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo},
|
106
|
-
staging: JSON.parse(wp_staging).inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo},
|
107
|
-
production: JSON.parse(wp_production).inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
|
108
|
-
}
|
109
89
|
|
110
|
-
|
90
|
+
Resolver.get( :server )
|
111
91
|
|
112
92
|
when :project
|
113
93
|
|
114
|
-
|
94
|
+
if !eval( IO.read( project_file( project_name ) ) ).nil?
|
95
|
+
|
96
|
+
load_hash = Resolver.get :server == {} ? false : Resolver.get( :package )
|
97
|
+
|
98
|
+
end
|
115
99
|
|
116
100
|
when :swiftly
|
117
101
|
|
118
|
-
|
102
|
+
if !eval( IO.read( swiftlyfile ) ).nil?
|
103
|
+
|
104
|
+
load_hash = Resolver.get :server
|
105
|
+
|
106
|
+
end
|
119
107
|
|
120
108
|
when :global
|
121
109
|
|
122
110
|
load_hash = YAML.load_file( global_file )
|
123
111
|
|
112
|
+
when :all
|
113
|
+
|
114
|
+
eval( IO.read( swiftlyfile ) ) unless eval( IO.read( swiftlyfile ) ).nil?
|
115
|
+
|
116
|
+
|
117
|
+
wp_config_parse project_name
|
118
|
+
|
119
|
+
|
120
|
+
eval( IO.read( project_file( project_name ) ) ) unless eval( IO.read( project_file( project_name ) ) ).nil?
|
121
|
+
|
122
|
+
|
123
|
+
|
124
|
+
load_hash = Resolver.get :server
|
125
|
+
|
124
126
|
end
|
125
127
|
|
128
|
+
|
126
129
|
load_hash
|
127
130
|
|
128
131
|
end
|
132
|
+
|
133
|
+
def self.wp_config_parse project_name
|
134
|
+
|
135
|
+
if wp_config_file( project_name )
|
136
|
+
|
137
|
+
# load the wp-config file environment settings for wp-enabled environments
|
138
|
+
wp_local = File.read(
|
139
|
+
wp_config_file(
|
140
|
+
project_name
|
141
|
+
)
|
142
|
+
)[/\$local\s*?=[\s|\S]*?({[\s|\S]*?})/, 1]
|
143
|
+
|
144
|
+
wp_staging = File.read(
|
145
|
+
wp_config_file(
|
146
|
+
project_name
|
147
|
+
)
|
148
|
+
)[/\$staging\s*?=[\s|\S]*?({[\s|\S]*?})/, 1]
|
149
|
+
|
150
|
+
wp_production = File.read(
|
151
|
+
wp_config_file(
|
152
|
+
project_name
|
153
|
+
)
|
154
|
+
)[/\$production\s*?=[\s|\S]*?({[\s|\S]*?})/, 1]
|
155
|
+
|
156
|
+
if wp_local.nil? || wp_staging.nil? || wp_production.nil?
|
157
|
+
|
158
|
+
return {
|
159
|
+
local: {},
|
160
|
+
staging: {},
|
161
|
+
production: {}
|
162
|
+
}
|
163
|
+
|
164
|
+
end
|
165
|
+
|
166
|
+
hash = {
|
167
|
+
local: JSON.parse(wp_local).inject({}){|memo,(k,v)| memo[k] = v; memo},
|
168
|
+
staging: JSON.parse(wp_staging).inject({}){|memo,(k,v)| memo[k] = v; memo},
|
169
|
+
production: JSON.parse(wp_production).inject({}){|memo,(k,v)| memo[k] = v; memo}
|
170
|
+
}
|
171
|
+
|
172
|
+
hash.each do |k, v|
|
173
|
+
|
174
|
+
set :server, :type => k do
|
175
|
+
|
176
|
+
v.each do |setting, value|
|
177
|
+
|
178
|
+
if setting != 'wp_home'
|
179
|
+
|
180
|
+
case setting
|
181
|
+
when 'domain'
|
182
|
+
domain value
|
183
|
+
|
184
|
+
when 'repo'
|
185
|
+
repo value
|
186
|
+
|
187
|
+
when 'branch'
|
188
|
+
branch value
|
189
|
+
|
190
|
+
when 'ssh_path'
|
191
|
+
ssh_path value
|
192
|
+
|
193
|
+
when 'ssh_user'
|
194
|
+
ssh_user value
|
195
|
+
|
196
|
+
when 'db_name'
|
197
|
+
db_name value
|
198
|
+
|
199
|
+
when 'db_host'
|
200
|
+
db_host value
|
201
|
+
|
202
|
+
when 'db_user'
|
203
|
+
db_user value
|
204
|
+
|
205
|
+
when 'db_pass'
|
206
|
+
db_pass value
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
213
|
+
end
|
129
214
|
end
|
130
215
|
end
|
131
216
|
end
|
data/lib/swiftly/create.rb
CHANGED
@@ -59,7 +59,7 @@ module Swiftly
|
|
59
59
|
global_settings = Swiftly::Config.load :global
|
60
60
|
project_settings = Swiftly::Config.load :swiftly
|
61
61
|
|
62
|
-
template = Swiftly::
|
62
|
+
template = Swiftly::Package.load({
|
63
63
|
framework: :wordpress,
|
64
64
|
type: :template,
|
65
65
|
name: options[:template]
|
@@ -78,7 +78,6 @@ module Swiftly
|
|
78
78
|
CreateWordpress.new([
|
79
79
|
project_name,
|
80
80
|
template,
|
81
|
-
project_settings,
|
82
81
|
project_path
|
83
82
|
]).invoke_all
|
84
83
|
|
@@ -14,7 +14,7 @@ module Swiftly
|
|
14
14
|
|
15
15
|
argument :project_name
|
16
16
|
argument :template
|
17
|
-
argument :settings
|
17
|
+
# argument :settings
|
18
18
|
argument :project_path
|
19
19
|
|
20
20
|
desc "Handles the creation of a wordpress project."
|
@@ -121,7 +121,7 @@ module Swiftly
|
|
121
121
|
|
122
122
|
inside File.join( "wp-content", "plugins" ) do
|
123
123
|
|
124
|
-
plugins = Swiftly::
|
124
|
+
plugins = Swiftly::Package.load_plugins :wordpress
|
125
125
|
|
126
126
|
if plugins
|
127
127
|
|
@@ -153,17 +153,20 @@ module Swiftly
|
|
153
153
|
gsub_file 'wp-config.php', /\/\/\s*Insert_Salts_Below/, Net::HTTP.get('api.wordpress.org', '/secret-key/1.1/salt')
|
154
154
|
gsub_file 'wp-config.php', /(table_prefix\s*=\s*')(wp_')/, '\1' + @project_name[0,3] + "_'"
|
155
155
|
|
156
|
-
|
157
|
-
|
158
|
-
|
156
|
+
settings = Swiftly::Config.load :swiftly
|
157
|
+
|
158
|
+
if !settings.nil? &&
|
159
|
+
!settings[:local][:db_host].nil? &&
|
160
|
+
!settings[:local][:db_user].nil? &&
|
161
|
+
!settings[:local][:db_pass].nil?
|
159
162
|
|
160
163
|
gsub_file 'wp-config.php', /(\$local\s*?=[\s|\S]*?)({[\s|\S]*?})/ do |match|
|
161
164
|
|
162
165
|
'$local = \'{
|
163
166
|
"db_name": "' + @project_name + '_local_wp",
|
164
|
-
"db_host": "' +
|
165
|
-
"db_user": "' +
|
166
|
-
"db_pass": "' +
|
167
|
+
"db_host": "' + settings[:local][:db_host] + '",
|
168
|
+
"db_user": "' + settings[:local][:db_user] + '",
|
169
|
+
"db_pass": "' + settings[:local][:db_pass] + '",
|
167
170
|
"domain": "http://' + @project_name + '.dev",
|
168
171
|
"wp_home": "http://' + @project_name + '.dev"
|
169
172
|
}'
|
data/lib/swiftly/database.rb
CHANGED
@@ -170,7 +170,7 @@ module Swiftly
|
|
170
170
|
-h'#{@settings[environment][:db_host]}' \
|
171
171
|
-p'#{@settings[environment][:db_pass]}' \
|
172
172
|
-Bse"CREATE DATABASE IF NOT EXISTS \
|
173
|
-
#{@settings[environment][:db_name]}"
|
173
|
+
#{@settings[environment][:db_name].gsub(/\-|\./, '_')}"
|
174
174
|
EOF
|
175
175
|
|
176
176
|
swiftly_shell cmd
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require "swiftly/smokestack"
|
2
|
+
require "swiftly/factory"
|
3
|
+
|
4
|
+
module Swiftly
|
5
|
+
class DefinitionProxy
|
6
|
+
|
7
|
+
def factory(factory_class, &block)
|
8
|
+
|
9
|
+
factory = Swiftly::Factory.new
|
10
|
+
|
11
|
+
factory.instance_eval(&block)
|
12
|
+
|
13
|
+
Smokestack.registry[Swiftly.const_get(factory_class.capitalize)] = factory
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/swiftly/destroy.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
require "swiftly/server"
|
2
|
+
|
3
|
+
module Swiftly
|
4
|
+
class Factory < BasicObject
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
|
8
|
+
@attributes = {}
|
9
|
+
|
10
|
+
end
|
11
|
+
|
12
|
+
attr_reader :attributes
|
13
|
+
|
14
|
+
def method_missing(name, *args, &block)
|
15
|
+
|
16
|
+
@attributes[name] = args[0]
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/swiftly/init.rb
CHANGED
@@ -16,7 +16,7 @@ module Swiftly
|
|
16
16
|
|
17
17
|
say # spacer
|
18
18
|
|
19
|
-
say "\t\t#{APP_NAME} #{VERSION} Development Manager\n\n", :blue
|
19
|
+
say "\t\t#{APP_NAME} #{VERSION} Web Development Project Manager\n\n", :blue
|
20
20
|
|
21
21
|
say_status "#{APP_NAME}:", "Thanks for trying out #{APP_NAME}. Lets get started!", :green
|
22
22
|
|
data/lib/swiftly/packages.rb
CHANGED
@@ -1,15 +1,21 @@
|
|
1
1
|
require "swiftly/config"
|
2
2
|
require "swiftly/app_module"
|
3
3
|
require "yaml"
|
4
|
+
require "swiftly/factory"
|
4
5
|
|
5
6
|
module Swiftly
|
6
|
-
class
|
7
|
+
class Package < Thor
|
7
8
|
|
8
9
|
include Thor::Actions
|
9
10
|
include Helpers
|
10
11
|
|
11
12
|
no_commands do
|
12
13
|
|
14
|
+
attr_accessor :framework
|
15
|
+
attr_accessor :type
|
16
|
+
attr_accessor :name
|
17
|
+
attr_accessor :location
|
18
|
+
|
13
19
|
def self.file
|
14
20
|
|
15
21
|
@settings = Swiftly::Config.load :global
|
@@ -41,7 +47,21 @@ module Swiftly
|
|
41
47
|
|
42
48
|
def self.available
|
43
49
|
|
44
|
-
|
50
|
+
eval( IO.read( self.file ) )
|
51
|
+
|
52
|
+
load_hash = Resolver.get( :package ) == {} ? false : Resolver.get( :package )
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.set setting, *args, &block
|
57
|
+
|
58
|
+
Swiftly::Smokestack.define do
|
59
|
+
|
60
|
+
factory setting, &block
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
Swiftly::Resolver.load setting, args[0][:type], Swiftly::Smokestack.build( setting )
|
45
65
|
|
46
66
|
end
|
47
67
|
|
data/lib/swiftly/project.rb
CHANGED
@@ -10,69 +10,40 @@ module Swiftly
|
|
10
10
|
|
11
11
|
no_commands do
|
12
12
|
|
13
|
-
def self.
|
13
|
+
def self.set setting, *args, &block
|
14
14
|
|
15
|
-
|
16
|
-
global_config = Swiftly::Config.load :global
|
17
|
-
swiftly_config = Swiftly::Config.load :swiftly
|
18
|
-
project_config = Swiftly::Config.load :project, project_name
|
19
|
-
wp_config = Swiftly::Config.load :wp_config, project_name
|
15
|
+
Swiftly::Smokestack.define do
|
20
16
|
|
21
|
-
|
22
|
-
version: VERSION,
|
23
|
-
sites_path: global_config[:sites_path],
|
24
|
-
}
|
17
|
+
factory setting, &block
|
25
18
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
staging: {
|
55
|
-
db_name: defined?(wp_config[:staging][:db_name]) ? wp_config[:staging][:db_name] : project_config[:staging][:db_name],
|
56
|
-
db_host: defined?(wp_config[:staging][:db_host]) ? wp_config[:staging][:db_host] : switly_config[:staging][:db_host],
|
57
|
-
db_user: defined?(wp_config[:staging][:db_user]) ? wp_config[:staging][:db_user] : switly_config[:staging][:db_user],
|
58
|
-
db_pass: defined?(wp_config[:staging][:db_pass]) ? wp_config[:staging][:db_pass] : switly_config[:staging][:db_pass],
|
59
|
-
domain: defined?(switly_config[:staging][:domain]) ? switly_config[:staging][:domain] : wp_config[:staging][:domain],
|
60
|
-
repo: project_config[:staging][:repo],
|
61
|
-
branch: project_config[:staging][:branch],
|
62
|
-
ssh_path: project_config[:staging][:ssh_path],
|
63
|
-
ssh_user: project_config[:staging][:ssh_user],
|
64
|
-
},
|
65
|
-
production: {
|
66
|
-
db_name: defined?(wp_config[:production][:db_name]) ? wp_config[:production][:db_name] : project_config[:production][:db_name],
|
67
|
-
db_host: defined?(wp_config[:production][:db_host]) ? wp_config[:production][:db_host] : switly_config[:production][:db_host],
|
68
|
-
db_user: defined?(wp_config[:production][:db_user]) ? wp_config[:production][:db_user] : switly_config[:production][:db_user],
|
69
|
-
db_pass: defined?(wp_config[:production][:db_pass]) ? wp_config[:production][:db_pass] : switly_config[:production][:db_pass],
|
70
|
-
domain: defined?(switly_config[:production][:domain]) ? switly_config[:production][:domain] : wp_config[:production][:domain],
|
71
|
-
repo: project_config[:production][:repo],
|
72
|
-
branch: project_config[:production][:branch],
|
73
|
-
ssh_path: project_config[:production][:ssh_path],
|
74
|
-
ssh_user: project_config[:production][:ssh_user],
|
75
|
-
}
|
19
|
+
end
|
20
|
+
|
21
|
+
Swiftly::Resolver.load setting, args[0][:type], Swiftly::Smokestack.build( setting )
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.settings project_name = nil
|
26
|
+
|
27
|
+
project_name = self.get_project project_name
|
28
|
+
global_config = Swiftly::Config.load :global
|
29
|
+
swiftlyfile = Swiftly::Config.swiftlyfile
|
30
|
+
project_file = Swiftly::Config.project_file project_name
|
31
|
+
wp_config = Swiftly::Config.wp_config_file project_name
|
32
|
+
|
33
|
+
eval( IO.read( swiftlyfile ) ) unless eval( IO.read( swiftlyfile ) ).nil?
|
34
|
+
|
35
|
+
wp_config_parse wp_config
|
36
|
+
|
37
|
+
eval( IO.read( project_file ) ) unless eval( IO.read( project_file ) ).nil?
|
38
|
+
|
39
|
+
settings = Resolver.get :server
|
40
|
+
|
41
|
+
settings[:global] = global_config
|
42
|
+
|
43
|
+
settings[:project] = {
|
44
|
+
name: project_name,
|
45
|
+
path: File.join( global_config[:sites_path], project_name ),
|
46
|
+
dump: File.join( global_config[:sites_path], project_name, '_backups', 'dumps' )
|
76
47
|
}
|
77
48
|
|
78
49
|
if defined?( settings[:staging][:ssh_user] ) &&
|
@@ -97,6 +68,76 @@ module Swiftly
|
|
97
68
|
|
98
69
|
end
|
99
70
|
|
71
|
+
def self.wp_config_parse file
|
72
|
+
|
73
|
+
if file
|
74
|
+
|
75
|
+
# load the wp-config file environment settings for wp-enabled environments
|
76
|
+
wp_local = File.read( file )[/\$local\s*?=[\s|\S]*?({[\s|\S]*?})/, 1]
|
77
|
+
|
78
|
+
wp_staging = File.read( file )[/\$staging\s*?=[\s|\S]*?({[\s|\S]*?})/, 1]
|
79
|
+
|
80
|
+
wp_production = File.read( file )[/\$production\s*?=[\s|\S]*?({[\s|\S]*?})/, 1]
|
81
|
+
|
82
|
+
if wp_local.nil? || wp_staging.nil? || wp_production.nil?
|
83
|
+
|
84
|
+
return {
|
85
|
+
local: {},
|
86
|
+
staging: {},
|
87
|
+
production: {}
|
88
|
+
}
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
hash = {
|
93
|
+
local: JSON.parse(wp_local).inject({}){|memo,(k,v)| memo[k] = v; memo},
|
94
|
+
staging: JSON.parse(wp_staging).inject({}){|memo,(k,v)| memo[k] = v; memo},
|
95
|
+
production: JSON.parse(wp_production).inject({}){|memo,(k,v)| memo[k] = v; memo}
|
96
|
+
}
|
97
|
+
|
98
|
+
hash.each do |k, v|
|
99
|
+
|
100
|
+
set :server, :type => k do
|
101
|
+
|
102
|
+
v.each do |setting, value|
|
103
|
+
|
104
|
+
if setting != 'wp_home'
|
105
|
+
|
106
|
+
case setting
|
107
|
+
when 'domain'
|
108
|
+
domain value
|
109
|
+
|
110
|
+
when 'repo'
|
111
|
+
repo value
|
112
|
+
|
113
|
+
when 'branch'
|
114
|
+
branch value
|
115
|
+
|
116
|
+
when 'ssh_path'
|
117
|
+
ssh_path value
|
118
|
+
|
119
|
+
when 'ssh_user'
|
120
|
+
ssh_user value
|
121
|
+
|
122
|
+
when 'db_name'
|
123
|
+
db_name value
|
124
|
+
|
125
|
+
when 'db_host'
|
126
|
+
db_host value
|
127
|
+
|
128
|
+
when 'db_user'
|
129
|
+
db_user value
|
130
|
+
|
131
|
+
when 'db_pass'
|
132
|
+
db_pass value
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
100
141
|
def self.get_project( project_name )
|
101
142
|
|
102
143
|
pathname = Pathname.new project_name
|
@@ -110,7 +151,7 @@ module Swiftly
|
|
110
151
|
thor.say_status( "#{APP_NAME}:", "#{project_path} is not a project.\n", :yellow ) &&
|
111
152
|
abort unless File.directory?( project_path )
|
112
153
|
|
113
|
-
pathname.expand_path.basename
|
154
|
+
pathname.expand_path.basename.to_s
|
114
155
|
|
115
156
|
end
|
116
157
|
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module Swiftly
|
2
|
+
class Resolver
|
3
|
+
|
4
|
+
@@settings = {
|
5
|
+
server: [],
|
6
|
+
package: []
|
7
|
+
}
|
8
|
+
|
9
|
+
def self.load setting, type, attributes
|
10
|
+
|
11
|
+
@@settings[setting] << { type => attributes }
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.get setting
|
16
|
+
|
17
|
+
override = {}
|
18
|
+
final = {}
|
19
|
+
|
20
|
+
if !@@settings[setting].nil?
|
21
|
+
|
22
|
+
@@settings[setting].each do |s|
|
23
|
+
|
24
|
+
s.each do |k, v|
|
25
|
+
|
26
|
+
override[k] = []
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
@@settings[setting].each do |s|
|
32
|
+
|
33
|
+
s.each do |k, v|
|
34
|
+
|
35
|
+
override[k] << v
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
override.each do |k, v|
|
41
|
+
|
42
|
+
construct = {}
|
43
|
+
capture = {}
|
44
|
+
|
45
|
+
override[k].each do |o|
|
46
|
+
|
47
|
+
final.merge!( {k => {} } )
|
48
|
+
|
49
|
+
available_methods = o.methods - Object.methods
|
50
|
+
|
51
|
+
available_methods.each_with_index do |n, e|
|
52
|
+
|
53
|
+
unless (n.to_s.end_with?("="))
|
54
|
+
|
55
|
+
construct[n] = o.send(n) unless o.send(n).nil?
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
final[k] = capture.merge!( construct )
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
final
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require "swiftly/factory"
|
2
|
+
|
3
|
+
module Swiftly
|
4
|
+
class Server
|
5
|
+
|
6
|
+
attr_accessor :domain
|
7
|
+
attr_accessor :repo
|
8
|
+
attr_accessor :branch
|
9
|
+
attr_accessor :ssh_path
|
10
|
+
attr_accessor :ssh_user
|
11
|
+
attr_accessor :db_name
|
12
|
+
attr_accessor :db_host
|
13
|
+
attr_accessor :db_user
|
14
|
+
attr_accessor :db_pass
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'swiftly/definition_proxy'
|
2
|
+
|
3
|
+
module Swiftly
|
4
|
+
module Smokestack
|
5
|
+
|
6
|
+
@registry = {}
|
7
|
+
|
8
|
+
def self.registry
|
9
|
+
|
10
|
+
@registry
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.define(&block)
|
15
|
+
|
16
|
+
definition_proxy = Swiftly::DefinitionProxy.new
|
17
|
+
definition_proxy.instance_eval(&block)
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.build(factory_class, overrides = {})
|
22
|
+
|
23
|
+
instance = Swiftly.const_get(factory_class.capitalize).new
|
24
|
+
factory = registry[Swiftly.const_get(factory_class.capitalize)]
|
25
|
+
attributes = factory.attributes.merge(overrides)
|
26
|
+
|
27
|
+
attributes.each do |attribute_name, value|
|
28
|
+
|
29
|
+
instance.send("#{attribute_name}=", value)
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
instance
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -1,11 +1,17 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
1
|
+
# set :server, :type => :staging do
|
2
|
+
|
3
|
+
# repo
|
4
|
+
# branch
|
5
|
+
# ssh_path
|
6
|
+
# ssh_user
|
7
|
+
|
8
|
+
# end
|
9
|
+
|
10
|
+
# set :server, :type => :production do
|
11
|
+
|
12
|
+
# repo
|
13
|
+
# branch
|
14
|
+
# ssh_path
|
15
|
+
# ssh_user
|
16
|
+
|
17
|
+
# end
|
@@ -1,21 +1,23 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
:
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
1
|
+
set :server, :type => :local do
|
2
|
+
|
3
|
+
db_host '<%= @db_host %>'
|
4
|
+
db_user '<%= @db_user %>'
|
5
|
+
db_pass '<%= @db_pass %>'
|
6
|
+
|
7
|
+
end
|
8
|
+
|
9
|
+
# set :package, :type => :template do
|
10
|
+
|
11
|
+
# name 'mask'
|
12
|
+
# location 'https://github.com/micalexander/mask/archive/master.zip'
|
13
|
+
# status :disabled
|
14
|
+
|
15
|
+
# end
|
16
|
+
|
17
|
+
# set :package, :type => :plugin do
|
18
|
+
|
19
|
+
# name 'advanced-custom-fields-pro'
|
20
|
+
# location '/Users/username/plugins'
|
21
|
+
# status :disabled
|
22
|
+
|
23
|
+
# end
|
data/lib/swiftly/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: swiftly
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 5.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mic Alexander
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: git
|
@@ -105,8 +105,8 @@ extra_rdoc_files: []
|
|
105
105
|
files:
|
106
106
|
- ".DS_Store"
|
107
107
|
- ".gitignore"
|
108
|
-
- Dropbox/Development/www/Swiftlyfile
|
109
108
|
- Gemfile
|
109
|
+
- README.md
|
110
110
|
- bin/swiftly
|
111
111
|
- lib/swiftly/Rakefile
|
112
112
|
- lib/swiftly/app_module.rb
|
@@ -121,16 +121,19 @@ files:
|
|
121
121
|
- lib/swiftly/create_project.rb
|
122
122
|
- lib/swiftly/create_wordpress.rb
|
123
123
|
- lib/swiftly/database.rb
|
124
|
+
- lib/swiftly/definition_proxy.rb
|
124
125
|
- lib/swiftly/destroy.rb
|
125
|
-
- lib/swiftly/
|
126
|
-
- lib/swiftly/generate_post_type.rb
|
126
|
+
- lib/swiftly/factory.rb
|
127
127
|
- lib/swiftly/init.rb
|
128
128
|
- lib/swiftly/packages.rb
|
129
129
|
- lib/swiftly/project.rb
|
130
130
|
- lib/swiftly/pull.rb
|
131
131
|
- lib/swiftly/push.rb
|
132
|
+
- lib/swiftly/resolver.rb
|
132
133
|
- lib/swiftly/rollback.rb
|
134
|
+
- lib/swiftly/server.rb
|
133
135
|
- lib/swiftly/setup.rb
|
136
|
+
- lib/swiftly/smokestack.rb
|
134
137
|
- lib/swiftly/ssh.rb
|
135
138
|
- lib/swiftly/templates/config_global.erb
|
136
139
|
- lib/swiftly/templates/config_project.erb
|
data/lib/swiftly/generate.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'swiftly/generate_post_type'
|
2
|
-
require 'swiftly/app_module'
|
3
|
-
|
4
|
-
module Swiftly
|
5
|
-
class Generate < Thor
|
6
|
-
|
7
|
-
include Helpers
|
8
|
-
|
9
|
-
desc "cpt [option] PROJECT_NAME", "Creates Custom Post Type file"
|
10
|
-
|
11
|
-
def cpt(post_type_name, post_type_filter, project_name)
|
12
|
-
|
13
|
-
settings = Swiftly::Project.settings( project_name )
|
14
|
-
|
15
|
-
GeneratePostType.new([
|
16
|
-
post_type_name,
|
17
|
-
post_type_filter,
|
18
|
-
settings[:project]
|
19
|
-
]).invoke_all
|
20
|
-
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
require "thor/group"
|
2
|
-
require 'rubygems'
|
3
|
-
require 'active_support'
|
4
|
-
require 'active_support/core_ext/string'
|
5
|
-
|
6
|
-
module Swiftly
|
7
|
-
class GeneratePostType < Thor::Group
|
8
|
-
|
9
|
-
include Thor::Actions
|
10
|
-
|
11
|
-
argument :post_type_name
|
12
|
-
argument :post_type_filter
|
13
|
-
argument :project
|
14
|
-
|
15
|
-
desc "Handles the creation of the post type file."
|
16
|
-
|
17
|
-
def self.source_root
|
18
|
-
File.dirname(__FILE__)
|
19
|
-
end
|
20
|
-
|
21
|
-
def create()
|
22
|
-
|
23
|
-
if @post_type_filter == 'published-date' or @post_type_filter == ''
|
24
|
-
|
25
|
-
@filter = '&int-year=$matches[1]&int-month=$matches[2]'
|
26
|
-
@taxonomy_filter = '=$matches[1]&int-year=$matches[2]$&int-month=$matches[3]'
|
27
|
-
@filter_regexp = '(\d{4})/(\d{2})/??'
|
28
|
-
|
29
|
-
elsif @post_type_filter == 'last-name'
|
30
|
-
|
31
|
-
@post_type_filter = '&letter=$matches[1]'
|
32
|
-
@filter_regexp = '([A-Z])/??$'
|
33
|
-
|
34
|
-
elsif @post_type_filter == 'start-date'
|
35
|
-
|
36
|
-
@post_type_filter = '&month=$matches[1]'
|
37
|
-
@filter_regexp = '(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/?$'
|
38
|
-
|
39
|
-
else
|
40
|
-
|
41
|
-
say "\nswiftly: filter type \"#{@post_type_filter}\" unaccepted\n\n", :red
|
42
|
-
exit
|
43
|
-
|
44
|
-
end
|
45
|
-
|
46
|
-
template File.join( 'templates', 'post_type.erb' ), File.join( "#{@project[:path]}", 'wp-content', 'plugins', "#{@project[:name]}-specific-plugin", 'custom-post-types',"#{@post_type_name.pluralize}.php")
|
47
|
-
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|