public
Rubygem
Description: Advanced seed data handling for Rails, combining the best practices of several methods together.
Homepage: http://mbleigh.lighthouseapp.com/projects/10223-seed-fu
Clone URL: git://github.com/mbleigh/seed-fu.git
name age message
file .gitignore Fri Jul 04 12:21:09 -0700 2008 Adding autotest [jcnetdev]
file README Sat Apr 19 15:10:44 -0700 2008 Add Lighthouse URL to README. [mbleigh]
file Rakefile Fri Jul 04 11:55:20 -0700 2008 Refactoring Plugin to be Gem Friendly [jcnetdev]
file init.rb Fri Jul 04 11:55:20 -0700 2008 Refactoring Plugin to be Gem Friendly [jcnetdev]
directory lib/ Tue Aug 19 06:50:12 -0700 2008 Added the output back in. [mbleigh]
directory rails/ Fri Jul 04 11:55:20 -0700 2008 Refactoring Plugin to be Gem Friendly [jcnetdev]
file seed-fu.gemspec Tue Aug 19 06:50:30 -0700 2008 Bumped gem version. [mbleigh]
directory spec/ Sat Aug 16 15:01:52 -0700 2008 Merged all branches together again. [mbleigh]
directory tasks/ Wed Jul 16 13:38:59 -0700 2008 Introduced the FIXTURE_PATH environment variabl... [zdennis]
README
Seed Fu
=======

Seed Fu is an attempt to once and for all solve the problem of inserting and
maintaining seed data in a database. It uses a variety of techniques gathered
from various places around the web and combines them to create what is 
hopefully the most robust seed data system around.

If you have suggestions or come across problems, please report them on
the Lighthouse project for Seed Fu:
http://mbleigh.lighthouseapp.com/projects/10223-seed-fu/overview

Usage
=======

Seed data is taken from the db/fixtures directory. Simply make descriptive .rb
files in that directory (they can be named anything, but users.rb for the User
model seed data makes sense, etc.). These scripts will be run whenever the
db:seed rake task is called. You can put arbitrary Ruby code in these files,
but remember that it will be executed every time the rake task is called, so
it needs to be runnable multiple times on the same database.

You can also have environment-specific seed data placed in 
db/fixtures/ENVIRONMENT that will only be loaded if that is the current
environment.

Let's say we want to populate a few default users. In db/fixtures/users.rb we
write the following code:

    User.seed(:login, :email) do |s|
      s.login = "bob"
      s.email = "bob@bobson.com"
      s.first_name = "Bob"
      s.last_name = "Bobson"
    end
    
    User.seed(:login, :email) do |s|
      s.login = "bob"
      s.email = "bob@stevenson.com"
      s.first_name = "Bob"
      s.last_name = "Stevenson"
    end

That's all you have to do! You will now have two users created in the system
and you can change their first and last names in the users.rb file and it will
be updated as such.

The arguments passed to the <ActiveRecord>.seed method are the constraining
attributes: these must remain unchanged between db:seed calls to avoid data
duplication. By default, seed data will constrain to the id like so:

    Category.seed do |s|
      s.id = 1
      s.name = "Buttons"
    end
    
    Category.seed do |s|
      s.id = 2
      s.name = "Bobbins"
      s.parent_id = 1
    end
    
Note that any constraints that are passed in must be present in the subsequent
seed data setting.

Copyright (c) 2008 Michael Bleigh, released under the MIT license