Class: FixtureMe::AddFixtures
- Inherits:
-
Object
- Object
- FixtureMe::AddFixtures
- Defined in:
- lib/fixture_me.rb
Instance Method Summary collapse
- #all_models ⇒ Object
- #create_all_fixtures ⇒ Object
- #create_all_fixtures_no_timestamps ⇒ Object
- #create_fixture(table_name, sql, model) ⇒ Object
- #fixtures_dir ⇒ Object
- #get_list_of_unique_models_with_db_table ⇒ Object
-
#initialize ⇒ AddFixtures
constructor
A new instance of AddFixtures.
Constructor Details
#initialize ⇒ AddFixtures
Returns a new instance of AddFixtures.
46 47 48 |
# File 'lib/fixture_me.rb', line 46 def initialize @fixtures_dir = FileUtils.mkdir_p( "#{Dir.pwd}/tmp/fixtures/").first end |
Instance Method Details
#all_models ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 |
# 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 ⇒ Object
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# 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 ⇒ Object
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/fixture_me.rb', line 127 def 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) ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# 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 ⇒ Object
50 51 52 |
# File 'lib/fixture_me.rb', line 50 def fixtures_dir @fixtures_dir end |
#get_list_of_unique_models_with_db_table ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 |
# 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 |