class FixtureMe::AddFixtures

Public Class Methods

new() click to toggle source
# File lib/fixture_me.rb, line 46
def  initialize
   @fixtures_dir =  FileUtils.mkdir_p( "#{Dir.pwd}/tmp/fixtures/").first
end

Public Instance Methods

all_models() click to toggle source
# File lib/fixture_me.rb, line 55
def all_models
  # must eager load all the classes...
  Dir.glob("#{Dir.pwd}/app/models/**/*.rb") do |model_path|
    begin
     require model_path
    rescue
     # ignore
   end
 end
  # simply return them
  ActiveRecord::Base.send(:subclasses)
   #Dir.glob("#{Rails.root}/app/models/*.rb").map{|x| x.split("/").last.split(".").first.camelize}
 end
create_all_fixtures() click to toggle source
# File lib/fixture_me.rb, line 103
def create_all_fixtures

 modelswithtables = get_list_of_unique_models_with_db_table

 modelswithtables.each do |table_name|
       model = table_name.classify.constantize


       if model.columns.any?{|c| c.name == 'created_at'}
         sql = "SELECT * FROM #{table_name} ORDER BY created_at DESC"
       else
         sql = "SELECT * FROM #{table_name}"
       end

       self.create_fixture(table_name, sql, model)

       puts "extracted #{table_name}"
     end

end
create_all_fixtures_no_timestamps() click to toggle source
# File lib/fixture_me.rb, line 127
def create_all_fixtures_no_timestamps

 modelswithtables = get_list_of_unique_models_with_db_table
 exclude_columns = ['created_at', 'updated_at']


 modelswithtables.each do |table_name|
       model = table_name.classify.constantize
       columns = model.attribute_names - exclude_columns

       if model.columns.any?{|c| c.name == 'created_at'}
         #sql = "SELECT * FROM #{table_name} ORDER BY created_at DESC"
           sql =   model.select(columns).order("created_at DESC").to_sql
       else
         #sql = "SELECT * FROM #{table_name}"
          sql =   model.select(columns).to_sql
       end

       self.create_fixture(table_name, sql, model)

       puts "extracted #{table_name}"
     end

end
create_fixture(table_name, sql, model) click to toggle source
# File lib/fixture_me.rb, line 84
def  create_fixture(table_name, sql, model)

   File.open("#{fixtures_dir}#{table_name}.yml", "w") do |file|
     objects = ActiveRecord::Base.connection.select_all(sql)
     objects.each_with_index do |obj, i|
           model.columns.each do |col|
             if !col.null && obj[col.name].nil?
               obj[col.name] = ''
             end
           end
       file.write({"#{table_name}#{i}" => obj}.to_yaml.sub('---', ''))
       file.write "\n"
     end
   end


end
fixtures_dir() click to toggle source
# File lib/fixture_me.rb, line 50
def fixtures_dir
  @fixtures_dir
end
get_list_of_unique_models_with_db_table() click to toggle source
# File lib/fixture_me.rb, line 71
def  get_list_of_unique_models_with_db_table


         table_names = ActiveRecord::Base.connection.tables #.map{|a| a.capitalize.singularize}
         model_names = Dir["#{Dir.pwd}/app/models/**/*.rb"].map {|f| File.basename(f, '.*').pluralize}

         #Rails.application.eager_load! unless Rails.configuration.cache_classes
         #ActiveRecord::Base.descendants
         modelswithtables =  table_names & model_names

end