<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -31,17 +31,21 @@ class Factory
   #   name: (Symbol)
   #     A unique name for this sequence. This name will be referenced when
   #     calling next to generate new values from this sequence.
+  #   initial value: (optional argument)
+  #     Initial value of the sequence, defaults to 1. This can be any object that
+  #     responds to a next method, e.g. String.
   #   block: (Proc)
   #     The code to generate each value in the sequence. This block will be
   #     called with a unique number each time a value in the sequence is to be
   #     generated. The block should return the generated value for the
   #     sequence.
   #
-  # Example:
+  # Examples:
   #   
   #   Factory.sequence(:email) {|n| &quot;somebody_#{n}@example.com&quot; }
-  def self.sequence (name, &amp;block)
-    self.sequences[name] = Sequence.new(&amp;block)
+  #   Factory.sequence(:username, 'user_aaaa') {|s| s }
+  def self.sequence (name, initial_value = 1, &amp;block)
+    self.sequences[name] = Sequence.new(initial_value, &amp;block)
   end
 
   # Generates and returns the next value in a sequence.</diff>
      <filename>lib/factory_girl/factory.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,16 +2,16 @@ class Factory
 
   class Sequence
 
-    def initialize (&amp;proc)
+    def initialize (initial_value = 1, &amp;proc)
       @proc  = proc
-      @value = 0
+      @value = initial_value
     end
 
     def next
-      @value += 1
-      @proc.call(@value)
+      @value, prev = @value.next, @value
+      @proc.call(prev)
     end
 
   end
-
+  
 end</diff>
      <filename>lib/factory_girl/sequence.rb</filename>
    </modified>
    <modified>
      <diff>@@ -61,7 +61,7 @@ class FactoryTest &lt; Test::Unit::TestCase
     end
 
     should &quot;create a new sequence&quot; do
-      Factory::Sequence.expects(:new).with().returns(@sequence)
+      Factory::Sequence.expects(:new).with(1).returns(@sequence)
       Factory.sequence(@name)
     end
 
@@ -73,7 +73,30 @@ class FactoryTest &lt; Test::Unit::TestCase
     end
 
   end
+  
+  context &quot;defining a string sequence&quot; do
 
+    setup do
+      @sequence = mock('sequence')
+      @name     = :name
+      Factory::Sequence.stubs(:new).with('aaaa').returns(@sequence)
+    end
+
+    should &quot;create a new sequence&quot; do
+      Factory::Sequence.expects(:new).with('aaaa').returns(@sequence)
+      Factory.sequence(@name, 'aaaa')
+    end
+
+    should &quot;use the supplied block as the sequence generator&quot; do
+      Factory::Sequence.stubs(:new).yields('aaaa')
+      yielded = false
+      Factory.sequence(@name, 'aaaa') {|n| yielded = true }
+      assert yielded
+    end
+
+  end
+  
+  
   context &quot;a factory&quot; do
 
     setup do</diff>
      <filename>test/factory_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -25,5 +25,66 @@ class SequenceTest &lt; Test::Unit::TestCase
     end
 
   end
+  
+  context &quot;a string sequence&quot; do
+    
+    setup do
+      @sequence = Factory::Sequence.new('aaaa') {|s| s}
+    end
+    
+    should &quot;start with a value of 'aaaa'&quot; do
+      assert_equal 'aaaa', @sequence.next
+    end
+    
+    context 'after being called' do
+      
+      setup do
+        @sequence.next
+      end
+      
+      should 'use the next value' do
+        assert_equal 'aaab', @sequence.next
+      end
 
+    end
+    
+  end
+  
+  context &quot;a sequence of prime numbers&quot; do
+
+    setup do
+      class PrimeSequence
+        def initialize
+          require 'mathn'
+          @prime = Prime.new
+        end
+        
+        def next
+          @value = @prime.next
+          self
+        end
+        
+        attr_reader :value
+      end
+      @sequence = Factory::Sequence.new(PrimeSequence.new) {|p| p.value }
+    end
+    
+    should &quot;start with the value 2&quot; do
+      assert_equal 2, @sequence.next
+    end
+    
+    context 'after being called' do
+      
+      setup do
+        @sequence.next
+      end
+      
+      should 'use the next value' do
+        assert_equal 3, @sequence.next
+      end
+
+    end
+    
+  end
+  
 end</diff>
      <filename>test/sequence_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>edd39c652c17376cd76dfe34767ec5b84716c029</id>
    </parent>
  </parents>
  <author>
    <name>Tim Medina</name>
    <email>tim@timmedina.com</email>
  </author>
  <url>http://github.com/teem/factory_girl/commit/c35d0e1bb8575ea01f620b0cdd4e4f19c0067db8</url>
  <id>c35d0e1bb8575ea01f620b0cdd4e4f19c0067db8</id>
  <committed-date>2008-07-15T10:44:55-07:00</committed-date>
  <authored-date>2008-07-15T10:44:55-07:00</authored-date>
  <message>Make Factory.sequence more generic by letting it accept objects with next method, like strings, as initial values.</message>
  <tree>b631ef770017d0ef107e94c51dd2e8188f494343</tree>
  <committer>
    <name>Tim Medina</name>
    <email>tim@timmedina.com</email>
  </committer>
</commit>
