Like my blog and my other projects? Support these projects and have some fun by checking out Oz Quiz, a 600+ question Australian history & popular culture quiz for the iPhone and iPod Touch I've co-developed.

Dumping your data into fixtures

The following code will dump your table data into fixtures that you can use for your tests. This is useful if the database needs to contain a known set of data before your tests are run.

This is modified heavily from this DZone snippet: http://snippets.dzone.com/posts/show/4468

namespace :db do
  namespace :fixtures do
    desc 'Dumps all models into fixtures.'
    task :dump => :environment do
      (ActiveRecord::Base.connection.tables - ['schema_migrations']).each do |table|
        puts "Dumping #{table}"
        rows = ActiveRecord::Base.connection.select_all("SELECT * FROM #{ActiveRecord::Base.connection.quote_table_name(table)} ORDER BY id ASC")
        out = {}
        rows.each_with_index { |mi, i| out["#{table.singularize}_#{i + 1}"] = mi }
      
        model_file = RAILS_ROOT + "/spec/fixtures/#{table}.yml"
        
        File.exists?(model_file) ? File.delete(model_file) : nil
        File.open(model_file, 'w') {|f| f << YAML.dump(out).gsub("<%", "<%%") }
      end
    end
  end
end

01:20 PM on Monday, 22/06/2009

Say something!