OSDN Git Service

fix test
[pettanr/pettanr.git] / lib / tasks / fixtures.rake
diff --git a/lib/tasks/fixtures.rake b/lib/tasks/fixtures.rake
new file mode 100644 (file)
index 0000000..6113e83
--- /dev/null
@@ -0,0 +1,46 @@
+# -*- encoding: utf-8 -*-\r
+require 'erb'\r
+\r
+namespace :db do\r
+  namespace :fixtures do\r
+    \r
+    desc 'Create FactoryGirl test fixtures from data in an existing database.  \r
+    Defaults to development database.  Set RAILS_ENV to override.'\r
+    task :dump => :environment do\r
+      sql  = "SELECT * FROM %s"\r
+      ActiveRecord::Base.establish_connection(Rails.env)\r
+      Manifest.manifest.items.each do |n, v|\r
+        model_man = Manifest.manifest.models[n]\r
+        model = model_man.classify\r
+        data = ActiveRecord::Base.connection.select_all(sql % model.table_name)\r
+tpl = <<-HD\r
+# -*- encoding: utf-8 -*-\r
+FactoryGirl.define do\r
+<% c = "000" -%>\r
+<% data.each do |row| -%>\r
+  factory <%= ':' + n + c.succ! -%>, :class => <%= model.to_s -%> do |i|\r
+<% model_man.attributes.each do |name, attr| -%>\r
+<% next if name == 'id' -%>\r
+<% next if name == 'created_at' -%>\r
+<% next if name == 'updated_at' -%>\r
+    i.<%= name -%> <%= case attr.type\r
+    when 'text'\r
+      "'" + row[name].to_s.gsub("'", "\\\\\\\\'") + "'"\r
+    when 'datetime'\r
+      row[name] ? "DateTime.parse('" + row[name] + "')" : 'nil'\r
+    else\r
+      row[name]\r
+    end %>\r
+<% end -%>\r
+  end\r
+<% end -%>\r
+end\r
+HD\r
+        erb = ERB.new(tpl, nil, '-')\r
+        File.open("#{Rails.root}/spec/factories/#{n}.rb", 'w') do |f|\r
+          f.puts erb.result(binding)\r
+        end\r
+      end\r
+    end\r
+  end\r
+end\r