rake task for extracting database contents

This is the inverse of db:fixtures:load. I modified the version I found to take the FIXTURES environment variable as a parameter. Saved as gist 440058.
# extract_fixtures.rake # by Paul Schreiber <paulschreiber at gmail.com> # 15 June 2010 # # I got this from Peter Gulezian <http://metoca.net/> # Looks like another version is here # <http: //redmine.rubyforge.org/svn/trunk/lib/tasks/extract_fixtures.rake> # # This is the inverse of the built-in rake db:fixtures:load # # Usage: rake db:fixtures:extract # rake db:fixtures:extract FIXTURES=foo # rake db:fixtures:extract FIXTURES=foo,bar # desc ‘Create YAML test fixtures from data in an existing database. Defaults to development database. Set RAILS_ENV to override.’ namespace :db do namespace :fixtures do task :extract => :environment do sql = “SELECT * FROM %s” skip_tables = [“schema_migrations”] ActiveRecord::Base.establish_connection if ENV[“FIXTURES”] tables = ENV[“FIXTURES”].split(“,”) else tables = (ActiveRecord::Base.connection.tables – skip_tables) end tables.each do |table_name| i = “000” File.open(“#{RAILS_ROOT}/test/fixtures/#{table_name}.yml”, ‘w’) do |file| data = ActiveRecord::Base.connection.select_all(sql % table_name) file.write data.inject({}) { |hash, record| hash[“#{table_name}_#{i.succ!}”] = record hash }.to_yaml end end end end end

Leave a Reply

Your email address will not be published. Required fields are marked *