namespace :db do

desc 'Convert development DB to Rails test fixtures'
task dump_to_fixture: :environment do
  TABLES_TO_SKIP = %w[ar_internal_metadata delayed_jobs schema_info schema_migrations].freeze

  begin
    ActiveRecord::Base.establish_connection
    ActiveRecord::Base.connection.tables.each do |table_name|
      next if TABLES_TO_SKIP.include?(table_name)

      counter = '000'
      file_path = "#{Rails.root}/test/fixtures/#{table_name}.yml"
      File.open(file_path, 'w') do |file|
        rows = ActiveRecord::Base.connection.select_all("SELECT * FROM #{table_name}")
        data = rows.each_with_object({}) do |record, hash|
          suffix = record['id'].blank? ? counter.succ! : record['id']
          hash["#{table_name.singularize}_#{suffix}"] = record
        end
        puts "Writing table '#{table_name}' to '#{file_path}'"
        file.write(data.to_yaml)
      end
    end
  ensure
    ActiveRecord::Base.connection.close if ActiveRecord::Base.connection
  end
end

end