OSDN Git Service

fix test
[pettanr/pettanr.git] / lib / tasks / fixtures.rake
1 # -*- encoding: utf-8 -*-\r
2 require 'erb'\r
3 \r
4 namespace :db do\r
5   namespace :fixtures do\r
6     \r
7     desc 'Create FactoryGirl test fixtures from data in an existing database.  \r
8     Defaults to development database.  Set RAILS_ENV to override.'\r
9     task :dump => :environment do\r
10       sql  = "SELECT * FROM %s"\r
11       ActiveRecord::Base.establish_connection(Rails.env)\r
12       Manifest.manifest.items.each do |n, v|\r
13         model_man = Manifest.manifest.models[n]\r
14         model = model_man.classify\r
15         data = ActiveRecord::Base.connection.select_all(sql % model.table_name)\r
16 tpl = <<-HD\r
17 # -*- encoding: utf-8 -*-\r
18 FactoryGirl.define do\r
19 <% c = "000" -%>\r
20 <% data.each do |row| -%>\r
21   factory <%= ':' + n + c.succ! -%>, :class => <%= model.to_s -%> do |i|\r
22 <% model_man.attributes.each do |name, attr| -%>\r
23 <% next if name == 'id' -%>\r
24 <% next if name == 'created_at' -%>\r
25 <% next if name == 'updated_at' -%>\r
26     i.<%= name -%> <%= case attr.type\r
27     when 'text'\r
28       "'" + row[name].to_s.gsub("'", "\\\\\\\\'") + "'"\r
29     when 'datetime'\r
30       row[name] ? "DateTime.parse('" + row[name] + "')" : 'nil'\r
31     else\r
32       row[name]\r
33     end %>\r
34 <% end -%>\r
35   end\r
36 <% end -%>\r
37 end\r
38 HD\r
39         erb = ERB.new(tpl, nil, '-')\r
40         File.open("#{Rails.root}/spec/factories/#{n}.rb", 'w') do |f|\r
41           f.puts erb.result(binding)\r
42         end\r
43       end\r
44     end\r
45   end\r
46 end\r