#!/usr/bin/env ruby # environmentalize # Author: John Trupiano require 'fileutils' include FileUtils require 'yaml' rails_root = ARGV[0] || '.' puts "rails_root: #{rails_root}" config_base = File.join(rails_root, 'config') old_env_dir = File.join(config_base, 'environments') %w(demo development production staging test).each do |env| dir = File.join(config_base, env) if !File.directory?(dir) puts "mkdir -p #{dir}" mkdir_p dir end old_env_file = File.join(old_env_dir, "#{env}.rb") if File.exists?(old_env_file) new_env_file = File.join(dir, "environment.rb") puts "mv #{old_env_file} #{new_env_file}" mv(old_env_file, new_env_file) end end # Copy production for these guys if it wasn't already found %w(demo staging).each do |env| new_env_file = File.join(config_base, env, "environment.rb") prod_env_file = File.join(config_base, "production", "environment.rb") if !File.exists?(new_env_file) puts "cp #{prod_env_file} #{new_env_file}" cp(prod_env_file, new_env_file) end end postboot = File.join(config_base, "postboot.rb") if !File.exists?(postboot) gem_postboot = File.dirname(__FILE__) + '/../lib/conf/postboot.rb' puts "cp #{gem_postboot} #{postboot}" cp(gem_postboot, postboot) end preinitializer = File.join(config_base, "preinitializer.rb") if !File.exists?(preinitializer) gem_preinitializer = File.join(File.dirname(__FILE__), '..', 'lib', 'conf', 'preinitializer.rb') puts "cp #{gem_preinitializer} #{preinitializer}" cp(gem_preinitializer, preinitializer) end boot_file = File.join(config_base, "boot.rb") boot_contents = File.open(boot_file).read if !boot_contents.include?("require File.join(File.dirname(__FILE__), 'postboot')") contents = <<-CONTENTS # Load postboot file to change Rails paths require File.join(File.dirname(__FILE__), 'postboot') CONTENTS boot_contents << contents File.open(boot_file, 'w') {|f| f.write(boot_contents) } end if File.directory?(old_env_dir) puts "Removing #{old_env_dir}" rm_rf(old_env_dir) end # Handle database.yml now old_db_yml = File.join(config_base, 'database.yml') if File.exists?(old_db_yml) y = YAML.load_file(old_db_yml) %w(demo development production staging test).each do |env| new_db_yml = File.join(config_base, env, 'database.yml') if !File.exists?(new_db_yml) if !y[env].nil? puts "Writing #{new_db_yml}" # remove all other keys y_dup = y.reject {|key, value| key != env} File.open(new_db_yml, 'w') {|f| f. write(y_dup.to_yaml) } end end end puts "Removing #{old_db_yml}" rm_f(old_db_yml) end