Bundler.require(:default) require 'fileutils' require 'yaml' require 'apache/config' require 'apache/rake/create' CONFIG = Hash[YAML.load_file('config.yml').collect { |k,v| [ k.to_sym, v ] }] def get_environments CONFIG[:source_path] = File.expand_path(CONFIG[:source]) Dir[File.join(CONFIG[:source_path], '**', '*.rb')].collect { |file| File.readlines(file).find_all { |line| line[%r{(if_environment|build_if)}] }.collect { |line| line.scan(%r{:[a-z_]+}) } }.flatten.uniq.sort.collect { |name| name[1..-1] } end def get_default_environment File.read('.environment').strip rescue nil end def need_environment puts "You need to specify an environment. Available environments:" puts puts get_environments.collect { |env| "rake apache:create[#{env}]" } * "\n" puts puts "Additionally, you can set a default environment for this server:" puts puts "rake apache:default[#{get_environments.first}]" exit 1 end task :default => 'apache:create' namespace :apache do desc "Create all defined configs for the specified environment" task :create, :environment do |t, args| need_environment if !args[:environment] && !get_default_environment APACHE_ENV = (args[:environment] || get_default_environment).to_sym CONFIG[:source_path] = File.expand_path(CONFIG[:source]) CONFIG[:dest_path] = File.expand_path(CONFIG[:destination]) Apache::Config.rotate_logs_path = CONFIG[:rotate_logs_path] FileUtils.mkdir_p CONFIG[:dest_path] Dir.chdir CONFIG[:dest_path] Dir[File.join(CONFIG[:source_path], '**', '*.rb')].each do |file| puts file.foreground(:green) require file end end desc "List all possible environments" task :environments do puts get_environments * "\n" end desc "Set the default environment (currently #{get_default_environment || 'nil'})" task :default, :environment do |t, args| need_environment if !args[:environment] if get_environments.include?(args[:environment]) File.open('.environment', 'w') { |fh| fh.puts args[:environment] } puts "Calls to apache:create will now use #{args[:environment]} when you don't specify the environment." else puts "You need to specify a valid default environment. Here are the possibilities:" Rake::Task['apache:environments'].invoke end end end