fanforce-cli 1.7.1 → 2.0.0.rc1
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/Gemfile.lock +7 -65
- data/Rakefile +1 -1
- data/bin/fanforce +1 -17
- data/fanforce-cli.gemspec +10 -18
- data/lib/fanforce/cli.rb +5 -10
- data/lib/fanforce/cli/_load.rb +177 -0
- data/lib/fanforce/cli/app.rb +16 -26
- data/lib/fanforce/cli/apps.rb +10 -19
- data/lib/fanforce/cli/scripts/version.rb +12 -0
- data/lib/fanforce/cli/utils.rb +64 -44
- data/lib/fanforce/cli/version.rb +1 -1
- metadata +15 -119
- data/bin/fanforce-supercharge +0 -7
- data/lib/fanforce/cli/_base.rb +0 -263
- data/lib/fanforce/cli/commands.rb +0 -512
- data/lib/fanforce/cli/commands_support.rb +0 -205
- data/lib/fanforce/cli/env.rb +0 -41
- data/lib/fanforce/cli/files.rb +0 -290
- data/lib/fanforce/cli/help.rb +0 -99
- data/lib/fanforce/cli/run.rb +0 -53
@@ -1,205 +0,0 @@
|
|
1
|
-
class Fanforce::CLI
|
2
|
-
require 'fileutils'
|
3
|
-
|
4
|
-
def setup_files(app)
|
5
|
-
if File.directory?("#{app.dir}/tmp")
|
6
|
-
puts "#{'Found '.format(:green,:bold)} #{app.dir_name}/tmp/"
|
7
|
-
else
|
8
|
-
Dir.mkdir("#{app.dir}/tmp")
|
9
|
-
puts "#{'Created'.format(:green,:bold)} #{app.dir_name}/tmp/"
|
10
|
-
end
|
11
|
-
|
12
|
-
if File.exists?("#{app.dir}/config.ru")
|
13
|
-
app.update_file(:config_ru)
|
14
|
-
puts "#{'Updated'.format(:green,:bold)} #{app.dir_name}/config.ru"
|
15
|
-
else
|
16
|
-
app.create_file(:config_ru)
|
17
|
-
puts "#{'Created'.format(:green,:bold)} #{app.dir_name}/config.ru"
|
18
|
-
end
|
19
|
-
|
20
|
-
if File.exists?("#{app.dir}/.gitignore")
|
21
|
-
app.update_file(:gitignore)
|
22
|
-
puts "#{'Updated'.format(:green,:bold)} #{app.dir_name}/.gitignore"
|
23
|
-
else
|
24
|
-
app.create_file(:gitignore)
|
25
|
-
puts "#{'Created'.format(:green,:bold)} #{app.dir_name}/.gitignore"
|
26
|
-
end
|
27
|
-
|
28
|
-
if File.exists?("#{app.dir}/Gemfile")
|
29
|
-
app.update_file(:gemfile)
|
30
|
-
puts "#{'Updated'.format(:green,:bold)} #{app.dir_name}/Gemfile"
|
31
|
-
else
|
32
|
-
app.create_file(:gemfile)
|
33
|
-
puts "#{'Created'.format(:green,:bold)} #{app.dir_name}/Gemfile"
|
34
|
-
end
|
35
|
-
|
36
|
-
if File.exists?("#{app.dir}/Rakefile")
|
37
|
-
app.update_file(:rakefile)
|
38
|
-
puts "#{'Updated'.format(:green,:bold)} #{app.dir_name}/Rakefile"
|
39
|
-
else
|
40
|
-
app.create_file(:rakefile)
|
41
|
-
puts "#{'Created'.format(:green,:bold)} #{app.dir_name}/Rakefile"
|
42
|
-
end
|
43
|
-
|
44
|
-
restart(app, :development)
|
45
|
-
end
|
46
|
-
|
47
|
-
def setup_envs(app, environment)
|
48
|
-
environments = environment == :all ? [:development, :staging, :production] : [environment]
|
49
|
-
|
50
|
-
if !File.exists?("#{$HomeDir}/.env/_bind.yml")
|
51
|
-
return puts "#{'Oops'.format(:bold)}... you must setup .env/_bind.yml before trying to update env variables."
|
52
|
-
end
|
53
|
-
|
54
|
-
environments.each do |environment|
|
55
|
-
vars = Env.vars_by_app(environment)[app.dir_name]
|
56
|
-
has_workers = File.directory?("#{app.dir}/workers") ? true : false
|
57
|
-
|
58
|
-
next puts "#{'Skipped'.format(:bold)} #{environment.to_s.titleize} has 0 env variables" if vars.blank? or vars.size == 0
|
59
|
-
puts "#{'Updated'.format(:green,:bold)} #{environment.to_s.titleize}#{has_workers ? '... and workers have' : ' has'} #{vars.size} env variables"
|
60
|
-
|
61
|
-
push_env_to(environment, app, vars)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def setup_pow(app)
|
66
|
-
Run.pow_create(app, app.root_domain)
|
67
|
-
Run.pow_create(app, Fanforce.default_short_domain)
|
68
|
-
end
|
69
|
-
|
70
|
-
def setup_local_git(app)
|
71
|
-
if Run.git_init.include?('Reinitialized')
|
72
|
-
puts "#{'Found '.format(:green,:bold)}" + 'local repository'
|
73
|
-
else
|
74
|
-
puts "#{'Initialized '.format(:green,:bold)}" + 'local repository'
|
75
|
-
Run.git_add
|
76
|
-
Run.git_first_commit
|
77
|
-
puts "#{'Created '.format(:green,:bold)}" + 'initial fanforce commit'
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
def setup_bitbucket(app)
|
82
|
-
bitbucket = BitBucket.new(login: $Config[:bitbucket][:user], password: $Config[:bitbucket][:password])
|
83
|
-
begin
|
84
|
-
find_bitbucket_repo(bitbucket, app.dir_name)
|
85
|
-
"#{'Found '.format(:green,:bold)}" + "#{app.dir_name} repository already exists on bitbucket"
|
86
|
-
rescue
|
87
|
-
create_bitbucket_repo(bitbucket, app.dir_name)
|
88
|
-
puts "#{'Created '.format(:green,:bold)}" + "#{app.dir_name} repository on bitbucket"
|
89
|
-
end
|
90
|
-
|
91
|
-
if (`git remote`).split(/\r?\n/).include?($Config[:bitbucket][:user])
|
92
|
-
puts "#{'Updated '.format(:green,:bold)}" + "git remote for #{$Config[:bitbucket][:user]}"
|
93
|
-
`git remote rm #{$Config[:bitbucket][:user]}`
|
94
|
-
elsif (`git remote`).split(/\r?\n/).include?('bitbucket')
|
95
|
-
`git remote rm bitbucket`
|
96
|
-
puts "#{'Removed '.format(:red,:bold)}" + "git remote for #{$Config[:bitbucket][:user]}"
|
97
|
-
puts "#{'Created '.format(:green,:bold)}" + "git remote for bitbucket"
|
98
|
-
else
|
99
|
-
puts "#{'Created '.format(:green,:bold)}" + "git remote for bitbucket"
|
100
|
-
end
|
101
|
-
`git remote add bitbucket git@bitbucket.org:#{$Config[:bitbucket][:user]}/#{app.dir_name}.git`
|
102
|
-
|
103
|
-
puts "#{'Pushing '.format(:green,:bold)}" + "latest commit to #{$Config[:bitbucket][:user]}..."
|
104
|
-
Run.command("git push bitbucket --all")
|
105
|
-
end
|
106
|
-
|
107
|
-
def find_bitbucket_repo(bitbucket, repo)
|
108
|
-
bitbucket.repos.find($Config[:bitbucket][:user], repo)
|
109
|
-
end
|
110
|
-
|
111
|
-
def create_bitbucket_repo(bitbucket, repo)
|
112
|
-
bitbucket.repos.create(name: repo, is_private: true)
|
113
|
-
rescue BitBucket::Error::Unauthorized => e
|
114
|
-
raise "Bitbucket user #{$Config[:bitbucket][:user]} does not seem to exist: #{e.message}"
|
115
|
-
raise
|
116
|
-
end
|
117
|
-
|
118
|
-
def auth_heroku(environment)
|
119
|
-
@heroku ||= {}
|
120
|
-
@heroku[environment] ||= Heroku::API.new(:username => $Config[:heroku][environment][:user], :password => $Config[:heroku][environment][:password])
|
121
|
-
rescue Exception => e
|
122
|
-
raise "Heroku user #{$Config[:heroku][environment][:user]} does not seem to exist: #{e.message}" if e.response.status == 404
|
123
|
-
raise
|
124
|
-
end
|
125
|
-
|
126
|
-
def setup_heroku(app, environment)
|
127
|
-
return puts "OOPS... #{environment.to_s.upcase}".format(:red,:bold) + ' has not been setup for Heroku' if $Config[:heroku].blank? or $Config[:heroku][environment].blank?
|
128
|
-
|
129
|
-
heroku = auth_heroku(environment)
|
130
|
-
heroku_app_name = get_heroku_app_name(app, environment)
|
131
|
-
begin
|
132
|
-
heroku.get_app(heroku_app_name)
|
133
|
-
puts "#{'Found '.format(:green,:bold)}" + "#{environment} app on heroku (#{heroku_app_name})"
|
134
|
-
rescue
|
135
|
-
heroku.post_app(name: heroku_app_name)
|
136
|
-
puts "#{'Created '.format(:green,:bold)}" + "#{environment} on heroku (#{heroku_app_name})"
|
137
|
-
end
|
138
|
-
|
139
|
-
vars = Env.vars_by_app(environment)[app.dir_name]
|
140
|
-
heroku.put_config_vars(heroku_app_name, vars) if vars
|
141
|
-
|
142
|
-
# Setup standard app domain
|
143
|
-
domain = "#{app._id}.#{Fanforce::DomainEnvironments.method(environment).call[:apps_base]}"
|
144
|
-
domain_found = heroku.get_domains(heroku_app_name).body.inject(false) {|result, d| d['domain'] == domain ? (break true) : false }
|
145
|
-
if domain_found
|
146
|
-
puts "#{'Found '.format(:green,:bold)}" + "#{domain} domain on #{environment}"
|
147
|
-
else
|
148
|
-
heroku.post_domain(heroku_app_name, domain)
|
149
|
-
puts "#{'Added '.format(:green,:bold)}" + "#{domain} domain to #{environment}"
|
150
|
-
end
|
151
|
-
|
152
|
-
# Setup default short domain
|
153
|
-
domain = "#{app._id}.#{Fanforce::DomainEnvironments.method(environment).call[:default_short_domain]}"
|
154
|
-
domain_found = heroku.get_domains(heroku_app_name).body.inject(false) {|result, d| d['domain'] == domain ? (break true) : false }
|
155
|
-
if domain_found
|
156
|
-
puts "#{'Found '.format(:green,:bold)}" + "#{domain} domain on #{environment}"
|
157
|
-
else
|
158
|
-
heroku.post_domain(heroku_app_name, domain)
|
159
|
-
puts "#{'Added '.format(:green,:bold)}" + "#{domain} domain to #{environment}"
|
160
|
-
end
|
161
|
-
|
162
|
-
remote_name = "#{env(environment)}-heroku"
|
163
|
-
if (`git remote`).split(/\r?\n/).include?(remote_name)
|
164
|
-
puts "#{'Updated '.format(:green,:bold)}" + "git remote for #{remote_name}"
|
165
|
-
`git remote rm #{remote_name}`
|
166
|
-
else
|
167
|
-
puts "#{'Created '.format(:green,:bold)}" + "git remote for #{remote_name}"
|
168
|
-
end
|
169
|
-
`git remote add #{remote_name} git@#{$Config[:heroku][environment][:git_ssh_domain] || 'heroku.com'}:#{heroku_app_name}.git`
|
170
|
-
|
171
|
-
puts "#{'Pushing '.format(:green,:bold)}" + "latest commit to #{remote_name}..."
|
172
|
-
Run.command("git push #{remote_name} master")
|
173
|
-
end
|
174
|
-
|
175
|
-
######################################################################################################################
|
176
|
-
|
177
|
-
def push_env_to(environment, app, vars, create_worker_env=true)
|
178
|
-
vars.each {|k,v| puts " - #{k}" }
|
179
|
-
workers_dir = "#{app.dir}/workers"
|
180
|
-
workers_env_dir = "#{workers_dir}/.env"
|
181
|
-
if create_worker_env and File.directory?(workers_dir) and vars['IRON_PROJECT_ID']
|
182
|
-
FileUtils.mkdir_p(workers_env_dir) unless File.directory?(workers_env_dir)
|
183
|
-
File.open("#{workers_env_dir}/#{environment}.rb", 'w') {|f| f.write convert_hash_to_ruby_env(vars) }
|
184
|
-
end
|
185
|
-
if environment == :development
|
186
|
-
app.update_file(:powenv)
|
187
|
-
File.open("#{app.dir}/.appenv", 'w') {|f| f.write convert_hash_to_shell_env(vars) }
|
188
|
-
else
|
189
|
-
return if $Config[:heroku][environment].blank?
|
190
|
-
heroku = auth_heroku(environment)
|
191
|
-
heroku_app_name = get_heroku_app_name(app, environment)
|
192
|
-
heroku.put_config_vars(heroku_app_name, vars)
|
193
|
-
end
|
194
|
-
restart(app, environment)
|
195
|
-
end
|
196
|
-
|
197
|
-
def convert_hash_to_shell_env(hash)
|
198
|
-
hash.inject('') {|script, (k,v)| script += "export #{k}=#{v.to_s.to_json}\n" }
|
199
|
-
end
|
200
|
-
|
201
|
-
def convert_hash_to_ruby_env(hash)
|
202
|
-
hash.inject('') {|script, (k,v)| script += "ENV['#{k}']=#{v.to_s.to_json}\n" }
|
203
|
-
end
|
204
|
-
|
205
|
-
end
|
data/lib/fanforce/cli/env.rb
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
class Fanforce::CLI::Env
|
2
|
-
require 'singleton'
|
3
|
-
require 'forwardable'
|
4
|
-
include Singleton
|
5
|
-
|
6
|
-
def load_vars_by_app(environment)
|
7
|
-
vars = {}
|
8
|
-
Fanforce::CLI::Apps.dir_names.each do |dir_name|
|
9
|
-
vars[dir_name] ||= {}
|
10
|
-
vars[dir_name]['FANFORCE_APP_ID'] = Fanforce::CLI::App.parse_dir_name(dir_name)[:_id]
|
11
|
-
end
|
12
|
-
|
13
|
-
raw_yaml = File.read("#{$HomeDir}/.env/_bind.yml")
|
14
|
-
bindings = (raw_yaml.present?) ? YAML.load(raw_yaml) : {}
|
15
|
-
bindings.each do |filename, dir_names|
|
16
|
-
file = YAML.load_file("#{$HomeDir}/.env/#{filename}.yml").symbolize_keys
|
17
|
-
next if file[environment].blank?
|
18
|
-
|
19
|
-
dir_names = Fanforce::CLI::Apps.dir_names if dir_names.is_a?(String) and dir_names.upcase == 'ALL'
|
20
|
-
file[environment].each do |k,v|
|
21
|
-
dir_names.each do |dir_name|
|
22
|
-
vars[dir_name] ||= {}
|
23
|
-
vars[dir_name]["#{filename}_#{k}".upcase] = v
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
return vars
|
29
|
-
end
|
30
|
-
|
31
|
-
def vars_by_app(environment)
|
32
|
-
@vars ||= {}
|
33
|
-
@vars[environment] ||= load_vars_by_app(environment)
|
34
|
-
end
|
35
|
-
|
36
|
-
class << self
|
37
|
-
extend Forwardable
|
38
|
-
def_delegators :instance, *Fanforce::CLI::Env.instance_methods(false)
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
data/lib/fanforce/cli/files.rb
DELETED
@@ -1,290 +0,0 @@
|
|
1
|
-
class Fanforce::CLI::Files
|
2
|
-
|
3
|
-
# CONFIG.RU #######################################################################
|
4
|
-
|
5
|
-
def self.create_config_ru(app)
|
6
|
-
file = config_ru_required_lines.join("\n") + "\n\n"
|
7
|
-
if (fanforce_config_lines = fanforce_config_lines(app._id)).size > 0
|
8
|
-
file += "FanforceApp.config do |config|\n"
|
9
|
-
file += fanforce_config_lines.map {|k,v| " #{k} = #{v}"}.join("\n") + "\n"
|
10
|
-
file += "end\n"
|
11
|
-
end
|
12
|
-
file += "run FanforceApp\n"
|
13
|
-
File.open("#{app.dir}/config.ru", 'w') {|f| f.write file }
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.update_config_ru(app)
|
17
|
-
return create_config_ru(app) if !File.exists?("#{app.dir}/config.ru")
|
18
|
-
|
19
|
-
lines = File.open("#{app.dir}/config.ru", 'r') {|f| f.readlines}
|
20
|
-
|
21
|
-
lines.clone.each {|l| lines.delete(l) if config_ru_required_lines.include?(l.strip) }
|
22
|
-
config_ru_required_lines.reverse.each {|l| lines.unshift(l+"\n") }
|
23
|
-
|
24
|
-
config_options = extract_fanforce_config_options(lines, 'config.ru')
|
25
|
-
|
26
|
-
fanforce_config_keys_to_require.each do |k|
|
27
|
-
config_options[k] = fanforce_config_lines(app._id)[k] if config_options[k].blank?
|
28
|
-
end
|
29
|
-
|
30
|
-
fanforce_config_keys_to_overwrite.each do |k|
|
31
|
-
config_options[k] = fanforce_config_lines(app._id)[k]
|
32
|
-
end
|
33
|
-
|
34
|
-
lines = replace_fanforce_config_options_in_config_ru(lines, config_options)
|
35
|
-
|
36
|
-
File.open("#{app.dir}/config.ru", 'w') {|f| f.write(lines.join('')) }
|
37
|
-
end
|
38
|
-
|
39
|
-
def self.replace_fanforce_config_options_in_config_ru(lines, config_options)
|
40
|
-
if (block = extract_fanforce_config_block(lines, 'config.ru'))
|
41
|
-
new_block = "FanforceApp.config do |config|\n"
|
42
|
-
new_block += config_options.map {|k,v| " #{k} = #{v}"}.join("\n") + "\n"
|
43
|
-
new_block += "end\n"
|
44
|
-
new_block += "run FanforceApp"
|
45
|
-
else
|
46
|
-
block = extract_run_fanforce_line(lines)
|
47
|
-
new_block = "run FanforceApp"
|
48
|
-
end
|
49
|
-
lines.join('').gsub(block[:code], new_block).lines.to_a
|
50
|
-
end
|
51
|
-
|
52
|
-
def self.config_ru_required_lines
|
53
|
-
[
|
54
|
-
"require 'bundler'; Bundler.setup",
|
55
|
-
"require 'fanforce/app_factory'"
|
56
|
-
]
|
57
|
-
end
|
58
|
-
|
59
|
-
# RAKEFILE #######################################################################
|
60
|
-
|
61
|
-
def self.create_rakefile(app)
|
62
|
-
file = rakefile_required_lines.join("\n") + "\n\n"
|
63
|
-
if (fanforce_config_lines = fanforce_config_lines(app._id)).size > 0
|
64
|
-
file += "FanforceApp.config do |config|\n"
|
65
|
-
file += fanforce_config_lines.map {|k,v| " #{k} = #{v}"}.join("\n") + "\n"
|
66
|
-
file += "end\n"
|
67
|
-
end
|
68
|
-
file += "load 'fanforce/app_factory.rake'\n"
|
69
|
-
File.open("#{app.dir}/Rakefile", 'w') {|f| f.write file }
|
70
|
-
end
|
71
|
-
|
72
|
-
def self.update_rakefile(app)
|
73
|
-
return create_rakefile(app) if !File.exists?("#{app.dir}/Rakefile")
|
74
|
-
|
75
|
-
lines = File.open("#{app.dir}/Rakefile", 'r') {|f| f.readlines}
|
76
|
-
|
77
|
-
lines.clone.each {|l| lines.delete(l) if rakefile_required_lines.include?(l.strip) }
|
78
|
-
rakefile_required_lines.reverse.each {|l| lines.unshift(l+"\n") }
|
79
|
-
|
80
|
-
config_options = extract_fanforce_config_options(lines, 'Rakefile')
|
81
|
-
|
82
|
-
fanforce_config_keys_to_require.each do |k|
|
83
|
-
config_options[k] = fanforce_config_lines(app._id)[k] if config_options[k].blank?
|
84
|
-
end
|
85
|
-
|
86
|
-
fanforce_config_keys_to_overwrite.each do |k|
|
87
|
-
config_options[k] = fanforce_config_lines(app._id)[k]
|
88
|
-
end
|
89
|
-
|
90
|
-
lines = replace_fanforce_config_options_in_rakefile(lines, config_options)
|
91
|
-
|
92
|
-
File.open("#{app.dir}/Rakefile", 'w') {|f| f.write(lines.join('')) }
|
93
|
-
end
|
94
|
-
|
95
|
-
def self.replace_fanforce_config_options_in_rakefile(lines, config_options)
|
96
|
-
if (block = extract_fanforce_config_block(lines, 'Rakefile'))
|
97
|
-
new_block = "FanforceApp.config do |config|\n"
|
98
|
-
new_block += config_options.map {|k,v| " #{k} = #{v}"}.join("\n") + "\n"
|
99
|
-
new_block += "end\n"
|
100
|
-
new_block += "load 'fanforce/app_factory.rake'"
|
101
|
-
else
|
102
|
-
block = extract_load_fanforce_line(lines)
|
103
|
-
new_block = "load 'fanforce/app_factory.rake'"
|
104
|
-
end
|
105
|
-
lines.join('').gsub(block[:code], new_block).lines.to_a
|
106
|
-
end
|
107
|
-
|
108
|
-
def self.rakefile_required_lines
|
109
|
-
[
|
110
|
-
"require 'bundler'; Bundler.setup",
|
111
|
-
"require 'fanforce/app_factory'"
|
112
|
-
]
|
113
|
-
end
|
114
|
-
|
115
|
-
########################################################################
|
116
|
-
|
117
|
-
def self.extract_load_fanforce_line(lines)
|
118
|
-
code = lines.join('')
|
119
|
-
regex = Regexp.compile('( *load\s+(\'|")fanforce/app_factory.rake(\'|"))', Regexp::MULTILINE)
|
120
|
-
if code !~ regex
|
121
|
-
raise "No valid \"load 'fanforce/app_factory.rake'\" line was found in your Rakefile."
|
122
|
-
end
|
123
|
-
{:code => $1}
|
124
|
-
end
|
125
|
-
|
126
|
-
def self.extract_run_fanforce_line(lines)
|
127
|
-
code = lines.join('')
|
128
|
-
regex = Regexp.compile('( *run\s+FanforceApp)', Regexp::MULTILINE)
|
129
|
-
if code !~ regex
|
130
|
-
raise "No valid \"run FanforceApp\" line was found in your config.ru."
|
131
|
-
end
|
132
|
-
{:code => $1}
|
133
|
-
end
|
134
|
-
|
135
|
-
def self.extract_fanforce_config_block(lines, filename)
|
136
|
-
code = lines.join('')
|
137
|
-
regex = Regexp.compile('( *FanforceApp\.config\s*(do|{)\s*\|\s*([A-Za-z]+)\s*\|(.*)(end|})\s*(run\s+FanforceApp|load\s+(\'|")fanforce/app_factory.rake(\'|")))', Regexp::MULTILINE)
|
138
|
-
if code !~ regex || ($2 == '{' and $5 != '}') || ($2 == 'do' and $5 != 'end')
|
139
|
-
return nil
|
140
|
-
end
|
141
|
-
{
|
142
|
-
:code => $1,
|
143
|
-
:start_keyword => $2,
|
144
|
-
:config_var => $3,
|
145
|
-
:config_code => $4,
|
146
|
-
:end_keyword => $5
|
147
|
-
}
|
148
|
-
end
|
149
|
-
|
150
|
-
def self.extract_fanforce_config_options(lines, filename)
|
151
|
-
block = extract_fanforce_config_block(lines, filename)
|
152
|
-
return [] if !block
|
153
|
-
regex = Regexp.compile(block[:config_var]+'\.([\w]+)\s*=\s*(((?!'+block[:config_var]+'\.).)+)', Regexp::MULTILINE)
|
154
|
-
block[:config_code].scan(regex).inject({}) {|result, match| result.update "config.#{match[0]}" => match[1].strip }
|
155
|
-
end
|
156
|
-
|
157
|
-
def self.fanforce_config_lines(app_id)
|
158
|
-
lines = {}
|
159
|
-
return lines
|
160
|
-
end
|
161
|
-
|
162
|
-
def self.fanforce_config_keys_to_require
|
163
|
-
[]
|
164
|
-
end
|
165
|
-
|
166
|
-
def self.fanforce_config_keys_to_overwrite
|
167
|
-
keys = []
|
168
|
-
return keys
|
169
|
-
end
|
170
|
-
|
171
|
-
# GEMFILE #######################################################################
|
172
|
-
|
173
|
-
def self.create_gemfile(app)
|
174
|
-
file = gemfile_source_lines.join("\n") + "\n"
|
175
|
-
file += gemfile_ruby_version + "\n\n"
|
176
|
-
file += gemfile_factory_line + "\n\n"
|
177
|
-
File.open("#{app.dir}/Gemfile", 'w') {|f| f.write file }
|
178
|
-
end
|
179
|
-
|
180
|
-
def self.update_gemfile(app)
|
181
|
-
return create_gemfile(app) if !File.exists?("#{app.dir}/Gemfile")
|
182
|
-
|
183
|
-
lines = File.open("#{app.dir}/Gemfile", 'r') {|f| f.readlines}.map {|l| l.strip }
|
184
|
-
gemfile_source_lines.reverse.each {|l| lines.delete(l); lines.unshift(l) }
|
185
|
-
|
186
|
-
lines.clone.each {|l| lines.delete(l) if l =~ /^ruby .+/ }
|
187
|
-
lines.each_with_index do |l,i|
|
188
|
-
next if l =~ /^source .+/
|
189
|
-
lines.insert(i, gemfile_ruby_version) and break
|
190
|
-
end
|
191
|
-
|
192
|
-
lines = lines.map do |l|
|
193
|
-
l.include?("gem 'fanforce-app-factory'") ? gemfile_factory_line : l
|
194
|
-
end
|
195
|
-
lines << gemfile_factory_line if !lines.include?(gemfile_factory_line)
|
196
|
-
|
197
|
-
File.open("#{app.dir}/Gemfile", 'w') {|f| f.write(lines.join "\n") }
|
198
|
-
end
|
199
|
-
|
200
|
-
def self.gemfile_source_lines
|
201
|
-
[
|
202
|
-
"source 'https://rubygems.org'",
|
203
|
-
]
|
204
|
-
end
|
205
|
-
|
206
|
-
def self.gemfile_ruby_version
|
207
|
-
"ruby '1.9.3'"
|
208
|
-
end
|
209
|
-
|
210
|
-
def self.gemfile_factory_line
|
211
|
-
line = "gem 'fanforce-app-factory'"
|
212
|
-
return line if !$Config[:app_factory_gem].is_a?(Hash)
|
213
|
-
|
214
|
-
line += ", '#{$Config[:app_factory_gem][:version]}'" if $Config[:app_factory_gem][:version].present?
|
215
|
-
line += ", :path => '#{$Config[:app_factory_gem][:path]}'" if $Config[:app_factory_gem][:path].present?
|
216
|
-
line += ", :git => '#{$Config[:app_factory_gem][:git]}'" if $Config[:app_factory_gem][:git].present?
|
217
|
-
line
|
218
|
-
end
|
219
|
-
|
220
|
-
# .GITIGNORE #######################################################################
|
221
|
-
|
222
|
-
def self.create_gitignore(app)
|
223
|
-
file = gitignore_lines.join("\n") + "\n"
|
224
|
-
File.open("#{app.dir}/.gitignore", 'w') {|f| f.write file }
|
225
|
-
end
|
226
|
-
|
227
|
-
def self.update_gitignore(app)
|
228
|
-
return create_gitignore(app) if !File.exists?("#{app.dir}/.gitignore")
|
229
|
-
|
230
|
-
lines = File.open("#{app.dir}/.gitignore", 'r') {|f| f.readlines}.map {|l| l.strip }
|
231
|
-
|
232
|
-
gitignore_lines.each do |line|
|
233
|
-
lines << line if !lines.include?(line)
|
234
|
-
end
|
235
|
-
|
236
|
-
File.open("#{app.dir}/.gitignore", 'w') {|f| f.write(lines.join "\n") }
|
237
|
-
end
|
238
|
-
|
239
|
-
def self.gitignore_lines; [
|
240
|
-
'*.gem',
|
241
|
-
'*.rbc',
|
242
|
-
'.bundle',
|
243
|
-
'.config',
|
244
|
-
'coverage',
|
245
|
-
'InstalledFiles',
|
246
|
-
'lib/bundler/man',
|
247
|
-
'pkg',
|
248
|
-
'rdoc',
|
249
|
-
'spec/reports',
|
250
|
-
'test/tmp',
|
251
|
-
'test/version_tmp',
|
252
|
-
'tmp',
|
253
|
-
'.idea/',
|
254
|
-
'.sass-cache/',
|
255
|
-
'.DS_STORE',
|
256
|
-
'.powenv',
|
257
|
-
'.env/',
|
258
|
-
'.pluginenv',
|
259
|
-
'.appenv',
|
260
|
-
'.widgetenv',
|
261
|
-
'.*env.rb',
|
262
|
-
'.yardoc',
|
263
|
-
'_yardoc',
|
264
|
-
'doc/',
|
265
|
-
] end
|
266
|
-
|
267
|
-
# .POWENV #######################################################################
|
268
|
-
|
269
|
-
def self.create_powenv(app)
|
270
|
-
file = powenv_lines.join("\n") + "\n"
|
271
|
-
File.open("#{app.dir}/.powenv", 'w') {|f| f.write file }
|
272
|
-
end
|
273
|
-
|
274
|
-
def self.update_powenv(app)
|
275
|
-
return create_powenv(app) if !File.exists?("#{app.dir}/.powenv")
|
276
|
-
|
277
|
-
lines = File.open("#{app.dir}/.powenv", 'r') {|f| f.readlines}.map {|l| l.strip }
|
278
|
-
|
279
|
-
powenv_lines.each do |line|
|
280
|
-
lines << line if !lines.include?(line)
|
281
|
-
end
|
282
|
-
|
283
|
-
File.open("#{app.dir}/.powenv", 'w') {|f| f.write(lines.join "\n") }
|
284
|
-
end
|
285
|
-
|
286
|
-
def self.powenv_lines
|
287
|
-
['source .appenv']
|
288
|
-
end
|
289
|
-
|
290
|
-
end
|