swiftly 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +7 -0
  2. data/.DS_Store +0 -0
  3. data/.gitignore +2 -0
  4. data/Dropbox/Development/www/Swiftlyfile +8 -0
  5. data/Gemfile +3 -0
  6. data/bin/swiftly +15 -0
  7. data/lib/swiftly/Rakefile +38 -0
  8. data/lib/swiftly/app_module.rb +320 -0
  9. data/lib/swiftly/clean.rb +33 -0
  10. data/lib/swiftly/cli.rb +36 -0
  11. data/lib/swiftly/config.rb +131 -0
  12. data/lib/swiftly/config_global_generator.rb +35 -0
  13. data/lib/swiftly/config_plugins_generator.rb +33 -0
  14. data/lib/swiftly/config_project_generator.rb +32 -0
  15. data/lib/swiftly/config_swiftlyfile_generator.rb +34 -0
  16. data/lib/swiftly/config_templates_generator.rb +33 -0
  17. data/lib/swiftly/configure.rb +27 -0
  18. data/lib/swiftly/configure_all.rb +181 -0
  19. data/lib/swiftly/configure_local.rb +34 -0
  20. data/lib/swiftly/configure_production.rb +42 -0
  21. data/lib/swiftly/configure_staging.rb +41 -0
  22. data/lib/swiftly/create.rb +94 -0
  23. data/lib/swiftly/create_git.rb +40 -0
  24. data/lib/swiftly/create_project.rb +67 -0
  25. data/lib/swiftly/create_wordpress.rb +185 -0
  26. data/lib/swiftly/database.rb +213 -0
  27. data/lib/swiftly/destroy.rb +53 -0
  28. data/lib/swiftly/enable.rb +13 -0
  29. data/lib/swiftly/enable_wordpress.rb +22 -0
  30. data/lib/swiftly/generate.rb +23 -0
  31. data/lib/swiftly/generate_post_type.rb +50 -0
  32. data/lib/swiftly/init.rb +130 -0
  33. data/lib/swiftly/packages.rb +137 -0
  34. data/lib/swiftly/project.rb +127 -0
  35. data/lib/swiftly/pull.rb +25 -0
  36. data/lib/swiftly/push.rb +60 -0
  37. data/lib/swiftly/rollback.rb +78 -0
  38. data/lib/swiftly/setup.rb +34 -0
  39. data/lib/swiftly/ssh.rb +36 -0
  40. data/lib/swiftly/templates/config_global.erb +3 -0
  41. data/lib/swiftly/templates/config_project.erb +11 -0
  42. data/lib/swiftly/templates/gitignore.erb +7 -0
  43. data/lib/swiftly/templates/post_type.erb +98 -0
  44. data/lib/swiftly/templates/swiftlyfile.erb +21 -0
  45. data/lib/swiftly/version.rb +4 -0
  46. data/swiftly.gemspec +61 -0
  47. data/test/test_swiftly_spec.rb +18 -0
  48. metadata +175 -0
@@ -0,0 +1,185 @@
1
+ require "thor/group"
2
+ require 'rubygems'
3
+ require 'active_support'
4
+ require 'swiftly/packages'
5
+ require 'swiftly/app_module'
6
+ require 'active_support/core_ext/string'
7
+ require 'git'
8
+
9
+ module Swiftly
10
+ class CreateWordpress < Thor::Group
11
+
12
+ include Thor::Actions
13
+ include Helpers
14
+
15
+ argument :project_name
16
+ argument :template
17
+ argument :settings
18
+ argument :project_path
19
+
20
+ desc "Handles the creation of a wordpress project."
21
+
22
+ def self.source_root
23
+
24
+ File.dirname(__FILE__)
25
+
26
+ end
27
+
28
+ def get_wordpress()
29
+
30
+ # download wordpress and place it in the project directory
31
+ inside @project_path do
32
+
33
+ get 'https://wordpress.org/latest.zip', 'latest.zip' unless File.exist? 'wordpress'
34
+
35
+ unzip 'latest.zip', 'wordpress' unless File.exist? 'wordpress'
36
+
37
+ remove_file 'latest.zip' unless !File.exist? 'latest.zip'
38
+
39
+ Dir['wordpress/*'].each do |e|
40
+
41
+ FileUtils.mv( e, @project_path ) unless File.exist? e.gsub(/^wordpress/, @project_path )
42
+
43
+ end
44
+
45
+ remove_file 'wordpress' unless !(Dir.entries('wordpress') - %w{ . .. }).empty?
46
+
47
+ inside File.join( 'wp-content', 'themes') do
48
+
49
+ if @template[:location] =~ /^#{URI::regexp}\.zip$/
50
+
51
+ zipfile = get @template[:location], File.basename( @template[:location] )
52
+
53
+ unzip zipfile, @template[:name] unless File.exist? @template[:name]
54
+
55
+ remove_file zipfile unless !File.exist? zipfile
56
+
57
+ else
58
+
59
+ FileUtils.cp_r( File.join( @template[:location], @template[:name] ), '.' )
60
+
61
+ end
62
+
63
+ FileUtils.mv( @template[:name], @project_name ) unless !File.exists? @template[:name].capitalize
64
+
65
+ inside @project_name do
66
+
67
+ [
68
+ '.git',
69
+ '_resources',
70
+ '.gitignore',
71
+ '.htaccess',
72
+ ".#{APP_NAME}",
73
+ ".#{APP_NAME}ignore"
74
+ ].each do |e|
75
+
76
+ remove_file e
77
+
78
+ end
79
+
80
+ [
81
+ '.htaccess',
82
+ 'wp-config.php',
83
+ 'bower.json',
84
+ 'config.rb',
85
+ 'Guardfile',
86
+ 'Gemfile',
87
+ 'Gemfile.lock'
88
+ ].each do |file|
89
+
90
+ gsub_file file, /(#{@template[:name]})/, @project_name unless !File.exists? file
91
+
92
+ FileUtils.mv( file, @project_path ) unless !File.exists? file
93
+
94
+ end
95
+
96
+ FileUtils.mv(
97
+ "#{@template[:name]}-specific-plugin",
98
+ File.join( @project_path, "wp-content", "plugins", "#{@project_name}-specific-plugin")
99
+ ) unless !File.exists? "#{@template[:name]}-specific-plugin"
100
+
101
+ FileUtils.mv(
102
+ File.join( "wp-login-logo-#{@template[:name]}.png" ) ,
103
+ File.join( "wp-login-logo-#{@project_name}.png" )
104
+ ) unless !File.exists? File.join( "wp-login-logo-#{@template[:name]}.png" )
105
+
106
+ gsub_file 'functions.php', /(#{@template[:name]})/, @project_name
107
+
108
+ end
109
+ end
110
+
111
+ inside File.join( "wp-content", "plugins", "#{@project_name}-specific-plugin") do
112
+
113
+ FileUtils.mv(
114
+ "#{@template[:name]}-plugin.php",
115
+ "#{@project_name}-plugin.php"
116
+ ) unless !File.exists? "#{@template[:name]}-plugin.php"
117
+
118
+ gsub_file "#{@project_name}-plugin.php", /(#{@template[:name]})/, @project_name.capitalize unless !File.exists? "#{@template[:name]}-plugin.php"
119
+
120
+ end
121
+
122
+ inside File.join( "wp-content", "plugins" ) do
123
+
124
+ plugins = Swiftly::Packages.load_plugins :wordpress
125
+
126
+ if plugins
127
+
128
+ # grab global plugins if they exist
129
+ plugins.each do |plugin|
130
+
131
+ if plugin[:location] =~ /^#{URI::regexp}\.zip$/
132
+
133
+ zipfile = get plugin[:location], File.basename( plugin[:location] )
134
+
135
+ unzip zipfile, plugin[:name] unless File.exist? plugin[:name]
136
+
137
+ remove_file zipfile unless !File.exist? zipfile
138
+
139
+ else
140
+
141
+ FileUtils.cp_r( File.join( plugin[:location], plugin[:name] ), '.' ) unless File.exist? plugin[:name]
142
+
143
+ end
144
+ end
145
+ end
146
+ end
147
+
148
+ # add plugins to the functions file
149
+ # Plugins.add_plugins_to_functions_file @project_path
150
+
151
+ remove_file "wp-config-sample.php"
152
+
153
+ gsub_file 'wp-config.php', /\/\/\s*Insert_Salts_Below/, Net::HTTP.get('api.wordpress.org', '/secret-key/1.1/salt')
154
+ gsub_file 'wp-config.php', /(table_prefix\s*=\s*')(wp_')/, '\1' + @project_name[0,3] + "_'"
155
+
156
+ if !@settings[:local][:db_host].nil? &&
157
+ !@settings[:local][:db_user].nil? &&
158
+ !@settings[:local][:db_pass].nil?
159
+
160
+ gsub_file 'wp-config.php', /(\$local\s*?=[\s|\S]*?)({[\s|\S]*?})/ do |match|
161
+
162
+ '$local = \'{
163
+ "db_name": "' + @project_name + '_local_wp",
164
+ "db_host": "' + @settings[:local][:db_host] + '",
165
+ "db_user": "' + @settings[:local][:db_user] + '",
166
+ "db_pass": "' + @settings[:local][:db_pass] + '",
167
+ "domain": "http://' + @project_name + '.dev",
168
+ "wp_home": "http://' + @project_name + '.dev"
169
+ }'
170
+
171
+ end
172
+ end
173
+
174
+ database = Swiftly::Database.new( @project_name )
175
+
176
+ database.create( :local )
177
+
178
+ run('bundle') unless !File.exists? 'Gemfile'
179
+ run('bundle exec guard') unless !File.exists? 'Guardfile'
180
+ run('bower update') unless !File.exists? 'bower.json'
181
+
182
+ end
183
+ end
184
+ end
185
+ end
@@ -0,0 +1,213 @@
1
+ require 'Thor'
2
+ require 'swiftly/app_module'
3
+ require "thor/group"
4
+ require 'swiftly/project'
5
+ require 'open3'
6
+
7
+ module Swiftly
8
+ class Database < Thor
9
+
10
+ include Thor::Actions
11
+ include Helpers
12
+
13
+ no_commands do
14
+
15
+ def initialize(project_name)
16
+
17
+ @settings = Project.settings( project_name )
18
+ @project_name = project_name
19
+
20
+ end
21
+
22
+ def verify_db_credentials( environment, verbage )
23
+
24
+ if @settings[environment][:db_user].nil?
25
+
26
+ say #spacer
27
+ say_status "#{APP_NAME}:", "Could not #{verbage} #{environment} database, because your credentials are not set.", :red
28
+
29
+ end
30
+
31
+ if @settings[environment][:db_host].nil?
32
+
33
+ say #spacer
34
+ say_status "#{APP_NAME}:", "Could not #{verbage} #{environment} database, because your credentials are not set.", :red
35
+
36
+ end
37
+
38
+ if @settings[environment][:db_pass].nil?
39
+
40
+ say #spacer
41
+ say_status "#{APP_NAME}:", "Could not #{verbage} #{environment} database, because your credentials are not set.", :red
42
+
43
+ end
44
+
45
+ if @settings[environment][:db_name].nil?
46
+
47
+ say #spacer
48
+ say_status "#{APP_NAME}:", "Could not #{verbage} #{environment} database, because your credentials are not set.", :red
49
+
50
+ end
51
+
52
+ abort if @settings[environment][:db_user].nil?
53
+ abort if @settings[environment][:db_host].nil?
54
+ abort if @settings[environment][:db_pass].nil?
55
+ abort if @settings[environment][:db_name].nil?
56
+
57
+ end
58
+
59
+ def dump( environment )
60
+
61
+ verify_db_credentials environment, 'dump your'
62
+
63
+ # provide the create dump site for the database dump
64
+ dump_path = File.join( @settings[:project][:dump], environment.to_s )
65
+
66
+ dump_file = "#{dump_path}/#{Time.now.strftime("%F-%H-%M-%S-%9N")}-#{environment}.sql"
67
+
68
+ # check if the credentials environment provided was local and the ssh_status is set in order to dump using ssh or not
69
+ if environment != :local && @settings[environment][:ssh_sql] != :disabled
70
+
71
+ cmd = <<-EOF.unindent
72
+ ssh \
73
+ -C #{@settings[environment][:ssh_user]}@#{@settings[environment][:domain].gsub(/http:\/\//, '')} \
74
+ mysqldump \
75
+ --single-transaction \
76
+ --opt \
77
+ --net_buffer_length=75000 \
78
+ --verbose \
79
+ -u'#{@settings[environment][:db_user]}' \
80
+ -h'#{@settings[environment][:db_host]}' \
81
+ -p'#{@settings[environment][:db_pass]}' \
82
+ '#{@settings[environment][:db_name]}' > \
83
+ '#{dump_file}'
84
+ EOF
85
+
86
+ swiftly_shell cmd
87
+
88
+ else
89
+
90
+ cmd = <<-EOF.unindent
91
+ mysqldump \
92
+ --single-transaction \
93
+ --opt --net_buffer_length=75000 \
94
+ --verbose \
95
+ -u'#{@settings[environment][:db_user]}' \
96
+ -h'#{@settings[environment][:db_host]}' \
97
+ -p'#{@settings[environment][:db_pass]}' \
98
+ '#{@settings[environment][:db_name]}' > \
99
+ '#{dump_file}'
100
+ EOF
101
+
102
+ swiftly_shell cmd
103
+
104
+ end
105
+
106
+ dump_file
107
+
108
+ end
109
+
110
+ def import( destination, import_file )
111
+
112
+ verify_db_credentials destination, 'import into your'
113
+
114
+ # dump the destination database first!
115
+ dump( destination )
116
+
117
+ # check if the destination destination provided was local and the ssh_status is set in order to dump using ssh or not
118
+ if destination != :local && @settings[destination][:ssh_sql] != :disabled
119
+
120
+ cmd = <<-EOF.unindent
121
+ ssh \
122
+ -C #{@settings[destination][:ssh_user]}@#{@settings[destination][:domain].gsub(/http:\/\//, '')} \
123
+ mysql \
124
+ -u'#{@settings[destination][:db_user]}' \
125
+ -h'#{@settings[destination][:db_host]}' \
126
+ -p'#{@settings[destination][:db_pass]}' \
127
+ '#{@settings[destination][:db_name]}' \
128
+ < '#{import_file}'
129
+ EOF
130
+
131
+ swiftly_shell cmd
132
+
133
+
134
+ else
135
+
136
+ cmd = <<-EOF.unindent
137
+ mysql \
138
+ -u'#{@settings[destination][:db_user]}' \
139
+ -h'#{@settings[destination][:db_host]}' \
140
+ -p'#{@settings[destination][:db_pass]}' \
141
+ '#{@settings[destination][:db_name]}' < \
142
+ '#{import_file}'
143
+ EOF
144
+
145
+ swiftly_shell cmd
146
+
147
+ end
148
+
149
+ end
150
+
151
+ def sync( origin, destination, import_file = nil )
152
+
153
+ verify_db_credentials origin, 'sync your'
154
+ verify_db_credentials destination, 'sync your'
155
+
156
+ # dump the origin database and return the file
157
+ import_file = dump( origin ) unless import_file != nil
158
+
159
+ import( destination, fix_serialization( update_urls(origin, destination, import_file ) ) )
160
+
161
+ end
162
+
163
+ def create( environment )
164
+
165
+ verify_db_credentials environment, 'create a'
166
+
167
+ cmd = <<-EOF.unindent
168
+ mysql \
169
+ -u'#{@settings[environment][:db_user]}' \
170
+ -h'#{@settings[environment][:db_host]}' \
171
+ -p'#{@settings[environment][:db_pass]}' \
172
+ -Bse"CREATE DATABASE IF NOT EXISTS \
173
+ #{@settings[environment][:db_name]}"
174
+ EOF
175
+
176
+ swiftly_shell cmd
177
+
178
+ end
179
+
180
+ def drop( environment )
181
+
182
+ verify_db_credentials environment, 'drop your'
183
+
184
+ cmd = <<-EOF.unindent
185
+ mysql \
186
+ -u'#{@settings[environment][:db_user]}' \
187
+ -h'#{@settings[environment][:db_host]}' \
188
+ -p'#{@settings[environment][:db_pass]}' \
189
+ -Bse"DROP DATABASE IF EXISTS \
190
+ #{@settings[environment][:db_name]}"
191
+ EOF
192
+
193
+ swiftly_shell cmd
194
+
195
+ end
196
+
197
+ def update_urls( origin, destination, import_file )
198
+
199
+ # copy the file to the temp folder
200
+ FileUtils.cp( import_file, File.join( @settings[:project][:dump], "temp") )
201
+
202
+ # return the rewritten file
203
+ return find_and_replace(
204
+ input: import_file,
205
+ pattern: @settings[origin][:domain],
206
+ output: @settings[destination][:domain],
207
+ file: true
208
+ )
209
+
210
+ end
211
+ end
212
+ end
213
+ end
@@ -0,0 +1,53 @@
1
+ require 'swiftly/app_module'
2
+ require 'swiftly/database'
3
+
4
+ module Swiftly
5
+ class Destroy < Thor
6
+
7
+ include Thor::Actions
8
+ include Helpers
9
+
10
+ desc "destroy PROJECT_NAME", "Destroy local project!"
11
+
12
+ def destroy( project_name )
13
+
14
+ settings = Swiftly::Project.settings project_name
15
+ directory = File.join( settings[:project][:path], '' )
16
+ zipfile_name = settings[:project][:path] + '.zip'
17
+
18
+ if File.exist? zipfile_name
19
+
20
+
21
+ say_status "#{APP_NAME}:", "There is already a zip file named [#{project_name}.zip]. \n\n", :red
22
+
23
+ responses = ['y','Y','']
24
+
25
+ unless responses.include? ask set_color "Do you want to overwrite it? [Y/n]", :yellow
26
+
27
+ say #spacer
28
+ say_status "#{APP_NAME}:", "No changes were made. Please remove [#{project_name}.zip] before running destroy again.\n\n", :yellow
29
+ abort
30
+
31
+ end
32
+ end
33
+
34
+ database = Swiftly::Database.new( project_name )
35
+
36
+ database.dump( :local )
37
+ database.drop( :local )
38
+
39
+ remove_file zipfile_name
40
+
41
+ zip zipfile_name, directory
42
+
43
+ FileUtils.remove_dir( settings[:project][:path] )
44
+
45
+ say #spacer
46
+ say_status "#{APP_NAME}:", "A backup was stored at [#{settings[:project][:path]}.zip].\n\n", :green
47
+
48
+ end
49
+
50
+ default_task :destroy
51
+
52
+ end
53
+ end
@@ -0,0 +1,13 @@
1
+ require 'swiftly/app_module'
2
+ require 'swiftly/enable_wordpress'
3
+
4
+ module Swiftly
5
+ class Enable < Thor
6
+ include Thor::Actions
7
+ include Helpers
8
+
9
+ desc "wordpress [COMMAND]", "Enable wordpress intergrations"
10
+ subcommand "wordpress", Wordpress
11
+
12
+ end
13
+ end
@@ -0,0 +1,22 @@
1
+ require "swiftly/config_templates_generator"
2
+ require "swiftly/config_plugins_generator"
3
+
4
+ module Swiftly
5
+ class Wordpress < Thor
6
+
7
+ desc "plugins", "Enable plugins for intergration"
8
+ def plugins()
9
+
10
+ ConfigPluginsGenerator.new.create
11
+
12
+ end
13
+
14
+ desc "templates", "Enable templates for intergrations"
15
+
16
+ def templates()
17
+
18
+ ConfigTemplateGenerator.new.create
19
+
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,23 @@
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
@@ -0,0 +1,50 @@
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
@@ -0,0 +1,130 @@
1
+ require 'thor'
2
+ require 'json'
3
+ require 'swiftly/config_global_generator'
4
+ require 'swiftly/config_swiftlyfile_generator'
5
+ require 'swiftly/app_module'
6
+
7
+ module Swiftly
8
+ class Init < Thor
9
+
10
+ include Thor::Actions
11
+ include Helpers
12
+
13
+ desc "init", "Initiate #{APP_NAME.capitalize} for the first time"
14
+
15
+ def init
16
+
17
+ say # spacer
18
+
19
+ say "\t\t#{APP_NAME} #{VERSION} Development Manager\n\n", :blue
20
+
21
+ say_status "#{APP_NAME}:", "Thanks for trying out #{APP_NAME}. Lets get started!", :green
22
+
23
+ settings = []
24
+
25
+ inside Dir.home do
26
+
27
+ responses = ['y','Y','']
28
+
29
+ questions = {
30
+ sites_path: "\n\n--> What is the absolute path to the folder \n\s\s\s\swhere you keep all of your sites? (\e[0;m#{Dir.home}\e[33;m):",
31
+ db_host: "\n--> What is your local hostname? (\e[0;mlocalhost\e[33;m):",
32
+ db_user: "\n--> What is your local mysql username? (\e[0;mroot\e[33;m):",
33
+ db_pass: "\n--> What is your local mysql password?"
34
+ }
35
+
36
+ questions.each do |type, question|
37
+
38
+ confirm = false
39
+
40
+ until confirm == true do
41
+
42
+ if type === :sites_path
43
+
44
+ answer = File.expand_path( ask question, :yellow, :path => true )
45
+
46
+ elsif type === :db_pass
47
+
48
+ answer = ask question, :yellow, :echo => false
49
+
50
+ else
51
+
52
+ answer = ask question, :yellow
53
+
54
+ end
55
+
56
+ if type === :sites_path && answer == ''
57
+
58
+ answer = Dir.home
59
+
60
+ elsif type === :db_pass
61
+
62
+ password = ask "\n\n--> Please re-enter your password?", :yellow, :echo => false
63
+
64
+ say #spacer
65
+
66
+ until password == answer
67
+
68
+ say_status "#{APP_NAME}:", "Passwords did not match please try again.\n", :yellow
69
+
70
+ answer = ask question, :yellow, :echo => false
71
+
72
+ password = ask "\n--> Please re-enter your password?\n", :yellow, :echo => false
73
+
74
+ end
75
+
76
+ if password == answer
77
+
78
+ confirm = true
79
+
80
+ end
81
+
82
+ elsif answer == ''
83
+
84
+ if question[/\e\[[0-9;]*[a-zA-Z](.*)\e\[[0-9;]*[a-zA-Z]/, 1] == ''
85
+
86
+ answer = nil
87
+
88
+ else
89
+
90
+ answer = question[/\e\[[0-9;]*[a-zA-Z](.*)\e\[[0-9;]*[a-zA-Z]/, 1]
91
+
92
+ end
93
+ end
94
+
95
+ unless type === :db_pass
96
+
97
+
98
+
99
+ if responses.include? ask( "\n--> Got it! Is this correct? \e[32;m#{answer}\e[0;m [Y|n]")
100
+
101
+ confirm = true
102
+
103
+ end
104
+ end
105
+ end
106
+
107
+ settings << answer
108
+
109
+ end
110
+
111
+ say_status "\n\s\s\s\sThats it!", "You can now run `#{APP_NAME} help` for more options."
112
+
113
+ end
114
+
115
+ Swiftly::ConfigGlobalGenerator.new([
116
+ settings[0]
117
+ ]).invoke_all
118
+
119
+ ConfigSwiftlyfileGenerator.new([
120
+ settings[1],
121
+ settings[2],
122
+ settings[3]
123
+ ]).invoke_all
124
+
125
+ end
126
+
127
+ default_task :init
128
+
129
+ end
130
+ end