app/domain/compilers/environments.rb
module Compilers
class Environments < Base
def initialize(params)
@params = params
end
def save(output_dir)
environments.each do |env|
env_params = {rails_env: env}.merge(@params[env.to_sym])
env_path = File.join(output_dir, env)
FileUtils.mkdir_p env_path
env_templates_path = File.join(output_dir, 'environment', target(env))
process_recursive(env_templates_path, '', env_path) do |source_path, target_path|
if File.extname(source_path) == Templates::EXT
if File.basename(source_path)[0] != '_'
target_path.gsub!('.erb', '')
render(source_path, target_path.gsub('.erb', ''), env_params)
end
else
FileUtils.cp_r source_path, target_path
end
end
env_config_path = File.join output_dir, 'ansible/group_vars', env
FileUtils.mkdir_p env_config_path
render(File.join(output_dir, 'environment', '_config.yml.erb'),
File.join(env_config_path, 'config.yml'),
env: env_params)
end
end
private
def process_file?(file)
true
end
def environments
%w(development staging production) & @params[:environments]
end
def target(env)
%w(virtualbox server).delete(@params[env.to_sym][:target])
end
end
end