# -*- encoding: utf-8 -*- require 'erb' namespace :db do namespace :fixtures do desc 'Create FactoryGirl test fixtures from data in an existing database. Defaults to development database. Set RAILS_ENV to override.' task :dump => :environment do sql = "SELECT * FROM %s" ActiveRecord::Base.establish_connection(Rails.env) Manifest.manifest.items.each do |n, v| model_man = Manifest.manifest.models[n] model = model_man.classify data = ActiveRecord::Base.connection.select_all(sql % model.table_name) tpl = <<-HD # -*- encoding: utf-8 -*- FactoryGirl.define do <% c = "000" -%> <% data.each do |row| -%> factory <%= ':' + n + c.succ! -%>, :class => <%= model.to_s -%> do |i| <% model_man.attributes.each do |name, attr| -%> <% next if name == 'id' -%> <% next if name == 'created_at' -%> <% next if name == 'updated_at' -%> i.<%= name -%> <%= case attr.type when 'text' "'" + row[name].to_s.gsub("'", "\\\\\\\\'") + "'" when 'datetime' row[name] ? "DateTime.parse('" + row[name] + "')" : 'nil' else row[name] end %> <% end -%> end <% end -%> end HD erb = ERB.new(tpl, nil, '-') File.open("#{Rails.root}/spec/factories/#{n}.rb", 'w') do |f| f.puts erb.result(binding) end end end end end