Class: FixtureMe::AddFixtures

Inherits:
Object
  • Object
show all
Defined in:
lib/fixture_me.rb

Instance Method Summary collapse

Constructor Details

#initializeAddFixtures

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_modelsObject



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_fixturesObject



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_timestampsObject



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 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) ⇒ 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_dirObject



50
51
52
# File 'lib/fixture_me.rb', line 50

def fixtures_dir
  @fixtures_dir
end

#get_list_of_unique_models_with_db_tableObject



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