diff --git a/README.textile b/README.textile index 8220a81..2bbdb09 100644 --- a/README.textile +++ b/README.textile @@ -1,31 +1,41 @@ -= factory_girl +h1. factory_girl - written by Joe Ferris - thanks to Tammer Saleh, Dan Croak, and Jon Yurek of thoughtbot, inc. - Copyright 2008 Joe Ferris and thoughtbot, inc. +Written by "Joe Ferris":mailto:jferris@thoughtbot.com. -== Defining factories +Thanks to Tammer Saleh, Dan Croak, and Jon Yurek of thoughtbot, inc. - # This will guess the User class - Factory.define :user do |u| - u.first_name 'John' - u.last_name 'Doe' - u.admin false - end +Copyright 2008 Joe Ferris and thoughtbot, inc. + +h2. Download + +Github: "Page":http://github.com/thoughtbot/factory_girl/tree/master "Clone":git://github.com/thoughtbot/factory_girl.git + +Gem:
gem install thoughtbot-factory_girl --source http://gems.github.com
+ +h2. Defining factories + +
# This will guess the User class
+Factory.define :user do |u|
+  u.first_name 'John'
+  u.last_name  'Doe'
+  u.admin false
+end
+
+# This will use the User class (Admin would have been guessed)
+Factory.define :admin, :class => User do |u|
+  u.first_name 'Admin'
+  u.last_name  'User'
+  u.admin true
+end
- # This will use the User class (Admin would have been guessed) - Factory.define :admin, :class => User do |u| - u.first_name 'Admin' - u.last_name 'User' - u.admin true - end It is recommended that you create a test/factories.rb file and define your factories there. This file can be included from test_helper or directly from your test files. Don't forget: - require 'factory_girl' +
require 'factory_girl'
-== Lazy Attributes + +h2. Lazy Attributes Most attributes can be added using static values that are evaluated when the factory is defined, but some attributes (such as associations and other @@ -33,73 +43,83 @@ attributes that must be dynamically generated) will need values assigned each time an instance is generated. These "lazy" attributes can be added by passing a block instead of a parameter: - Factory.define :user do |u| - # ... - u.activation_code { User.generate_activation_code } - end +
Factory.define :user do |u|
+  # ...
+  u.activation_code { User.generate_activation_code }
+end
-== Dependent Attributes + +h2. Dependent Attributes Some attributes may need to be generated based on the values of other attributes. This can be done by calling the attribute name on Factory::AttributeProxy, which is yielded to lazy attribute blocks: - Factory.define :user do |u| - u.first_name 'Joe' - u.last_name 'Blow' - u.email {|a| "#{a.first_name}.#{a.last_name}@example.com".downcase } - end +
Factory.define :user do |u|
+  u.first_name 'Joe'
+  u.last_name  'Blow'
+  u.email {|a| "#{a.first_name}.#{a.last_name}@example.com".downcase }
+end
 
-  Factory(:user, :last_name => 'Doe').email
-  # => "joe.doe@example.com"
+Factory(:user, :last_name => 'Doe').email
+# => "joe.doe@example.com"
-== Associations + +h2. Associations Associated instances can be generated by using the association method when defining a lazy attribute: - Factory.define :post do |p| - # ... - p.author {|author| author.association(:user, :last_name => 'Writely') } - end +
Factory.define :post do |p|
+  # ...
+  p.author {|author| author.association(:user, :last_name => 'Writely') }
+end
+ When using the association method, the same build strategy (build, create, or attributes_for) will be used for all generated instances: - # Builds and saves a User and a Post - post = Factory(:post) - post.new_record? # => false - post.author.new_record # => false +
# Builds and saves a User and a Post
+post = Factory(:post)
+post.new_record?       # => false
+post.author.new_record # => false
 
-  # Builds but does not save a User and a Post
-  Factory.build(:post)
-  post.new_record?       # => true
-  post.author.new_record # => true
+# Builds but does not save a User and a Post
+Factory.build(:post)
+post.new_record?       # => true
+post.author.new_record # => true
-== Sequences + +h2. Sequences Unique values in a specific format (for example, e-mail addresses) can be generated using sequences. Sequences are defined by calling Factory.sequence, and values in a sequence are generated by calling Factory.next: - # Defines a new sequence - Factory.sequence :email do |n| - "person#{n}@example.com" - end +
# Defines a new sequence
+Factory.sequence :email do |n|
+  "person#{n}@example.com"
+end
 
-  Factory.next :email
-  # => "person1@example.com"
+Factory.next :email
+# => "person1@example.com"
 
-  Factory.next :email
-  # => "person2@example.com"
+Factory.next :email
+# => "person2@example.com"
-== Using factories - # Build and save a User instance - Factory(:user) +h2. Using factories - # Build a User instance and override the first_name property - Factory.build(:user, :first_name => 'Joe') +
# Build and save a User instance
+Factory(:user)
 
-  # Return an attributes Hash that can be used to build a User instance
-  attrs = Factory.attributes_for(:user)
+# Build a User instance and override the first_name property
+Factory.build(:user, :first_name => 'Joe')
 
+# Return an attributes Hash that can be used to build a User instance
+attrs = Factory.attributes_for(:user)
+ +h2. More Information + +"Our blog":http://giantrobots.thoughtbot.com + +"factory_girl rdoc":http://dev.thoughtbot.com/factory_girl