namespace ‘db’ do
namespace 'populate' do def populators(environment_path) populators = [] populator_paths = Dir.glob(environment_path + "*.populator.rb") populator_paths.each do |populator_path| populators << populator_path.split("/").last.split(".").first end populators end def ordered_populators(environment_path) dependency_hash = Monsanto::TsortableHash[] pops = populators(environment_path) pops.each do |populator| klass = populator.classify.constantize parents = [] klass.reflect_on_all_associations(:belongs_to).each do |parent| unless parent.options[:polymorphic] parents << parent.table_name.singularize.to_sym end end dependency_hash[populator.singularize.to_sym] = parents end dependency_hash.tsort end environment_paths = Dir.glob("lib/tasks/populate/*/").split("/").last environment_paths.each do |environment_path| environment = environment_path.split("/").last unless ["support", "common"].include? environment namespace environment.to_sym do populators(environment_path).each do |populator| desc "Populate #{environment} db with #{populator} populator" task populator => :environment do populator_file = File.read("lib/tasks/populate/#{environment}/#{populator}.populator.rb") eval(populator_file) end end end desc "Populate #{environment} db" task environment.to_sym => :environment do Rake::Task["db:drop"].invoke Rake::Task["db:create"].invoke Rake::Task["db:migrate"].invoke ordered_populators(environment_path).each do |populator| Rake::Task["db:populate:#{environment}:#{populator.to_s.pluralize}"].invoke end end end end end
end