namespace :abtest do
desc "Create a new experiment scaffold. Experiment name is a required arg. (rake abtest:add_experiment[name])" task :add_experiment, [:name] => :environment do |t, args| name = args[:name] if (name.nil? || name.blank?) puts "Experiment name is required. Usage: rake abtest:add_experiment[name]" next end # Add directories for views and assets app_config = Rails.application.config test_root = File.join(Rails.root, 'abtest') experiment_path = File.join(test_root, 'experiments', name) application_css_path = File.join(experiment_path, app_config.assets.prefix, 'stylesheets') images_path = File.join(experiment_path, app_config.assets.prefix, 'images') javascript_path = File.join(experiment_path, app_config.assets.prefix, 'javascripts') view_path = File.join(experiment_path, 'views') experiment_init_path = File.join(Rails.root, 'config', 'initializers', 'abtest') FileUtils.mkdir_p(view_path) FileUtils.mkdir_p(application_css_path) FileUtils.mkdir_p(images_path) FileUtils.mkdir_p(javascript_path) FileUtils.mkdir_p(experiment_init_path) # Create a new initializer file if it doesn't exist already initializer_path = File.join(Rails.root, 'config', 'initializers', 'abtest.rb') unless File.exists?(initializer_path) ab_template = File.read(File.join(File.dirname(__FILE__), 'templates', 'abtest.erb')) renderer = ERB.new(ab_template) result = renderer.result(binding) File.open(initializer_path, 'w') {|f| f.write(result) } end # Add template initializer template = File.read(File.join(File.dirname(__FILE__), 'templates', 'initializer.erb')) renderer = ERB.new(template) result = renderer.result(binding) # Create new initializer file init_file_path = File.join(experiment_init_path, "#{name}.rb") File.open(init_file_path, 'a') { |f| f.write(result) } puts "Please edit #{init_file_path} to configure experiment." end desc "Delete all experiments" task :delete_experiments => :environment do # Remove experiments directory FileUtils.rm_rf(File.join(Rails.root, 'abtest')) FileUtils.rm_rf(File.join(Rails.root, 'config', 'initializers', 'abtest')) # Remove initializer FileUtils.rm_f(File.join(Rails.root, 'config', 'initializers', 'abtest.rb')) puts "All tests removed" end desc "Delete experiment. Experiment name is a required arg. (rake abtest:delete_experiment[name])" task :delete_experiment, [:name] => :environment do |t, args| name = args[:name] if (name.nil? || name.blank?) puts "Experiment name is required. Usage: rake abtest:add_experiment[name]" next end test_root = File.join(Rails.root, 'abtest') experiment_path = File.join(test_root, 'experiments', name) experiment_init_path = File.join(Rails.root, 'config', 'initializers', 'abtest') init_file_path = File.join(experiment_init_path, "#{name}.rb") # Remove experiments directory FileUtils.rm_rf(experiment_path) # Remove initializer FileUtils.rm_f(init_file_path) puts "Experiment #{name} removed." end
end