swiftly 4.0.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.
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