<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,13 +1,5 @@
 module IterationsHelper
   def display_stories_list_for_iteration(iteration)
-    if iteration.show?
-      render :partial  =&gt; 'stories/list', :locals =&gt; { :stories =&gt; iteration.stories } 
-    else
-      link_to_remote &quot;show iteration&quot;, 
-        :url =&gt; stories_iteration_path(iteration.project.id, iteration.id), 
-        :method =&gt; :get, 
-        :loading =&gt; &quot;Element.update('notice', 'Loading #{iteration.name}...') ; Element.show('notice')&quot;, 
-        :success =&gt; &quot;Element.hide('notice')&quot;
-    end
+    render :partial  =&gt; 'stories/list', :locals =&gt; { :stories =&gt; iteration.stories } 
   end  
 end</diff>
      <filename>app/helpers/iterations_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,6 @@
 &lt;ul id=&quot;subnav&quot;&gt;
   &lt;li&gt;&lt;%= link_to &quot;&lt;em&gt;o&lt;/em&gt;verview&quot;, project, :accesskey =&gt; &quot;o&quot; %&gt;&lt;/li&gt;
   &lt;li&gt;&lt;%= link_to &quot;&lt;em&gt;w&lt;/em&gt;orkspace&quot;, workspace_project_path(project), :accesskey =&gt; &quot;w&quot; %&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;%= link_to &quot;&lt;em&gt;i&lt;/em&gt;terations&quot;, iterations_path(project), :accesskey =&gt; &quot;i&quot; %&gt;&lt;/li&gt;
   &lt;li&gt;&lt;%= link_to &quot;&lt;em&gt;s&lt;/em&gt;tories&quot;, stories_path(project), :accesskey =&gt; &quot;s&quot; %&gt;&lt;/li&gt;
   &lt;li&gt;&lt;%= link_to &quot;&lt;em&gt;p&lt;/em&gt;hases&quot;, project_phases_path(project), :accesskey =&gt; &quot;p&quot; %&gt;&lt;/li&gt;
   &lt;li&gt;&lt;%= link_to &quot;invite people&quot;, new_project_invitation_path(project) %&gt;&lt;/li&gt;</diff>
      <filename>app/views/projects/_navigation.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -3,9 +3,6 @@
     &lt;h2&gt;&lt;%= project.name %&gt;: summary&lt;/h2&gt;
     &lt;%= render :partial =&gt; &quot;projects/summary&quot;, :locals =&gt; { :project =&gt; project } %&gt;
     
-    &lt;h2&gt;&lt;%= project.name %&gt;: iterations&lt;/h2&gt;
-    &lt;%= render :partial =&gt; &quot;projects/iterations_sidebar&quot;, :locals =&gt; { :project =&gt; project } %&gt;
-    
     &lt;h2&gt;&lt;%= project.name %&gt;: people&lt;/h2&gt;
     &lt;%= render :partial =&gt; &quot;projects/people_sidebar&quot;, :locals =&gt; { :project =&gt; project } %&gt;
   &lt;% end -%&gt;</diff>
      <filename>app/views/projects/_sidebar.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -12,8 +12,6 @@ ActionController::Routing::Routes.draw do |map|
   map.resources :projects, :member =&gt; { :workspace =&gt; :get } do |project_map|
     project_map.resources :phases
     project_map.resources :invitations
-    project_map.resources :iterations, :name_prefix =&gt; nil, 
-                          :member =&gt; { :stories =&gt; :get }
     project_map.resources :stories, :name_prefix =&gt; nil,
                           :collection =&gt; { :reorder =&gt; :put },
                           :member =&gt; { :update_points =&gt; :put, :update_status =&gt; :put, </diff>
      <filename>config/routes.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,33 +1,10 @@
 require File.dirname(__FILE__) + '/../spec_helper'
 
-describe IterationsHelper, &quot;#display_stories_list_for_iteration given an iteration that is not to be shown&quot; do
-  it &quot;returns a remote link to the stories_iteration_path&quot; do
-    @iteration = mock &quot;iteration&quot;
-    @project = mock &quot;project&quot;
-
-    @iteration.should_receive(:show?).and_return(false)
-    @iteration.should_receive(:project).and_return(@project)
-    @project.stub!(:id).and_return(1)
-    @iteration.stub!(:id).and_return(2)
-    @iteration.stub!(:name).and_return(&quot;Iteration 1&quot;)
-    self.should_receive(:link_to_remote).with(
-      &quot;show iteration&quot;, 
-      :url =&gt; stories_iteration_path(@project.id, @iteration.id),
-      :method =&gt; :get, 
-      :loading =&gt; &quot;Element.update('notice', 'Loading #{@iteration.name}...') ; Element.show('notice')&quot;, 
-      :success =&gt; &quot;Element.hide('notice')&quot;
-    ).and_return(&quot;REMOTE LINK&quot;)
-
-    display_stories_list_for_iteration(@iteration).should == &quot;REMOTE LINK&quot;
-  end
-end
-
-describe IterationsHelper, &quot;#display_stories_list_for_iteration given an iteration that is be shown&quot; do  
+describe IterationsHelper, &quot;#display_stories_list_for_iteration given an iteration&quot; do  
   it &quot;returns the rendered stories/list partial&quot; do
     @iteration = mock &quot;iteration&quot;
     @stories = mock &quot;stories&quot;
     
-    @iteration.should_receive(:show?).and_return(true)
     @iteration.should_receive(:stories).and_return(@stories)
     self.should_receive(:render).with(
       :partial =&gt; 'stories/list', </diff>
      <filename>spec/helpers/iterations_helper_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,357 +3,357 @@ module Spec::Example::ExampleGroupMethods
   alias_method :is, :it
 end
 
-# module Spec::Example::ExampleGroupMethods
-#   def it_delegates(*args)
-#     options = args.extract_options!
-#     methods = args
-#     src = options[:on]
-#     to = options[:to]
-#     raise &quot;Missing an object to call the method on, pass in :on&quot; unless src
-#     raise &quot;Missing an object to ensure the method delegated to, pass in :to&quot; unless to
-# 
-#     method_options = options.reject{|k,v| [:on, :to].include?(k)}
-#     methods.each {|m| method_options[m] = m}
-#     method_options.each do |source_method, to_method|
-#       it &quot;delegates ##{source_method} to @#{to}.#{to_method}&quot; do
-#         obj = instance_variable_get &quot;@#{to}&quot;
-#         _src = instance_variable_get &quot;@#{src}&quot;
-#         return_val = stub(&quot;return val&quot;)
-#         obj.should_receive(to_method).and_return(return_val)
-#         _src.send!(source_method).should == return_val
-#       end
-#     end
-#   end
-#   
-#   def it_provides_liquid_methods(*methods)
-#     it &quot;defines ##{self.described_type}::LiquidDrop (declare liquid_methods to do this automatically)&quot; do
-#       self.class.described_type.const_defined?(:LiquidDrop).should be_true
-#     end
-#     
-#     if self.described_type.const_defined?(:LiquidDrop)
-#       klass = self.described_type::LiquidDrop
-#       describe klass do
-#         before do
-#           @presenter = stub(&quot;presenter&quot;)
-#           @drop = klass.new(@presenter)
-#         end
-#         methods.each do |method|
-#           it &quot;provides ##{method} to liquid&quot; do
-#             return_value = stub(&quot;return value&quot;)
-#             @presenter.should_receive(method).and_return(return_value)
-#             @drop.send(method).should == return_value
-#           end
-#         end
-#       end
-#     end
-#   end
-# 
-#   def it_has_accessors(attribute, options)
-#     on_variable_name = options[:on]
-#     raise &quot;Missing an object to call the method on, pass in :on&quot; unless on_variable_name
-# 
-#     it &quot;has accessors for ##{attribute}&quot; do
-#       on = instance_variable_get &quot;@#{on_variable_name}&quot;
-#       on.send(&quot;#{attribute}=&quot;, :the_value)
-#       on.send(attribute).should == :the_value
-#     end
-#     
-#     if options.keys.include?(:default)
-#       it &quot;defaults ##{attribute} to #{options[:default].inspect}&quot; do
-#         on = instance_variable_get &quot;@#{on_variable_name}&quot;
-#         on.send(attribute).should == options[:default]
-#       end
-#     end
-#   end
-#   alias_method :it_has_accessor, :it_has_accessors
-#   
-# end
-# 
-# class Spec::Rails::Example::ViewExampleGroup
-#   def self.it_renders_a_link_to_unless_current(named_route)
-#     describe &quot;when #{named_route} is the current page&quot; do
-#       it &quot;does not render a link to the #{named_route} page&quot; do
-#         render_it
-#         response.should have_tag(&quot;a[href=?]&quot;, send(named_route))
-#       end
-#     end
-#     
-#     describe &quot;when #{named_route} is not the current page&quot; do
-#       it &quot;renders a link to the #{named_route}&quot; do
-#         template.stub!(:current_page?).and_return(true)
-#         render_it
-#         response.should_not have_tag(&quot;a[href=?]&quot;, send(named_route))
-#       end
-#     end
-#   end
-# 
-# 
-#   def self.it_renders_javascript_tags_for(*jsfiles)
-#     if jsfiles.include?(:defaults)
-#       jsfiles.delete(:defaults)
-#       jsfiles += [:prototype, :effects, :dragdrop, :controls]
-#     end
-#     jsfiles.each do |jsfile|
-#       it &quot;renders a javascript tag for #{jsfile}.js&quot; do
-#         render_it
-#         response.should have_tag('script[src*=?][type=text/javascript]', &quot;#{jsfile}.js&quot;)
-#       end
-#     end
-#   end
-#   
-#   def self.it_renders_stylesheet_link_tags_for(*cssfiles)
-#     options = cssfiles.extract_options!
-#     media = options[:media] || &quot;screen&quot;
-#     cssfiles.each do |cssfile|
-#       it &quot;renders a link tag for #{cssfile}.css&quot; do
-#         render_it
-#         response.should have_tag('link[href*=?][media=?][rel=stylesheet][type=text/css]', &quot;#{cssfile}.css&quot;, media)
-#       end
-#     end
-#   end
-#   
-#   def self.it_does_not_render_stylesheet_link_tags_for(*cssfiles)
-#     cssfiles.each do |cssfile|
-#       it &quot;does not render a link tag for #{cssfile}.css&quot; do
-#         render_it
-#         response.should_not have_tag('link[href*=?][rel=stylesheet][type=text/css]', &quot;#{cssfile}.css&quot;)
-#       end
-#     end
-#   end
-#   
-#   def self.it_renders_error_messages_for(*models)
-#     models.each do |model|
-#       it &quot;renders error messages for #{model}&quot; do
-#         instance = instance_variable_get &quot;@#{model}&quot;
-#         errors = stub(&quot;Errors&quot;, :count =&gt; 1, :full_messages =&gt; [&quot;attribute1 error1&quot;])
-#         instance.stub!(:errors).and_return(errors)
-#         render_it
-#         response.should have_tag(&quot;#errorExplanation&quot;, &quot;attribute1 error1&quot;.to_regexp)
-#       end
-#     end
-#   end
-# end
-# 
-# module Spec::Example::ExampleGroupMethods
-#   def model_class
-#     self.described_type
-#   end
-# 
-#   def it_requires attribute
-#     it &quot;requires #{attribute}&quot; do
-#        model = self.class.model_class.new
-#        assert_validates_presence_of model, attribute
-#     end
-#   end
-# 
-#   def it_protects attribute
-#     it &quot;protects #{attribute} from mass assignment&quot; do
-#       default_value = self.class.model_class.new[attribute]
-#       model = self.class.model_class.new(attribute =&gt; !default_value)
-#       model[attribute].should == default_value
-#     end
-#   end
-# 
-#   def it_validates_uniqueness_of attribute, options
-#     it &quot;validates the uniqueness of #{attribute}&quot; do
-#       model = self.class.model_class.new
-#       if options[:values]
-#         options[:values].each_pair do |attribute, value|
-#           model[attribute] = value
-#         end
-#       else
-#         model[attribute] = options[:value]
-#       end
-#       assert_attribute_invalid model, attribute
-#     end
-# 
-#     if options[:allow_nil]
-#       it &quot;doesn't enforce uniqueness on #{attribute} when it is nil&quot; do
-#         assert self.class.model_class.count(:conditions =&gt; {attribute =&gt; nil}) &gt; 0, &quot;must have a record where #{attribute} is nil to check this validation&quot;
-#         model = self.class.model_class.new
-#         model[attribute] = nil
-#         assert_attribute_valid model, attribute
-#       end
-#     else
-#       it &quot;enforces uniqueness on #{attribute} when it is nil&quot; do
-#         model = self.class.model_class.new
-#         model[attribute] = nil
-#         assert_attribute_invalid model, attribute
-#       end
-#     end
-#   end
-# 
-#   def it_validates_inclusion_of attribute, options
-#     options[:exclusions].each do |exclusion|
-#       it &quot;does not allow #{attribute} to have a value of #{exclusion.inspect}&quot; do
-#         model = self.class.model_class.new
-#         model[attribute] = exclusion
-#         assert_attribute_invalid(model, attribute)
-#       end
-#     end
-#     options[:inclusions].each do |inclusion|
-#       it &quot;allows #{attribute} to have a value of #{inclusion.inspect}&quot; do
-#         model = self.class.model_class.new
-#         model[attribute] = inclusion
-#         assert_attribute_valid(model, attribute)
-#       end
-#     end
-#   end
-# 
-#   def it_has_one association, options={}
-#     it &quot;has one #{association}&quot; do
-#       self.class.model_class.should have_association(:has_one, association.to_sym, options)
-#     end
-#   end
-# 
-# 
-#   def it_has_many association, options={}
-#     it &quot;has many #{association}&quot; do
-#       self.class.model_class.should have_association(:has_many, association.to_sym, options)
-#     end
-#   end
-# 
-#   def it_belongs_to association, options={}
-#     a_or_an = association.to_s =~ /^[aeiou]/i ? &quot;an&quot; : &quot;a&quot;
-#     it &quot;belongs to #{a_or_an} #{association}&quot; do
-#       self.class.model_class.should have_association(:belongs_to, association.to_sym, options)
-#     end
-#   end
-# 
-# end
-# 
-# class Spec::Rails::Example::ControllerExampleGroup  
-#   def self.controller_class
-#     self.described_type
-#   end
-#   
-#   class &lt;&lt; self
-#     def it_hides_the_actions(*actions)
-#       actions.each do |action|
-#         it &quot;hides the action ##{action}&quot; do
-#           controller.class.hidden_actions.should include(action.to_s)
-#         end
-#       end
-#     end
-#     alias_method :it_hides_the_action, :it_hides_the_actions
-#   end
-#   
-#   def self.it_does_not_require_login(method, action)
-#     it_skips_before_filter(:login_required, action)
-#   end
-#   
-#   def self.it_skips_before_filter(filter, action)
-#     describe controller_class, &quot;##{action}&quot; do
-#       it &quot;skips the '#{filter}' before filter&quot; do
-#         filter_not_present_or_exluded(filter, action).should be_true
-#       end
-#           
-#       def filter_not_present_or_exluded(filter, action)
-#         filter = controller.class.find_filter(filter)
-#         if filter
-#           controller.class.filter_excluded_from_action?(filter, action.to_s)
-#         else
-#           true
-#         end
-#       end
-#     end
-#   end
-#   
-#   def self.it_requires_login(method, action, params={})
-#     describe controller_class, &quot;#{method} ##{action} requires login&quot; do
-#       before do
-#         stub_before_filters! :except =&gt; :login_required
-#       end
-#       
-#       describe controller_class, &quot;when not logged in&quot; do
-#         it &quot;redirects to signup&quot; do
-#           send method, action, params
-#           response.should redirect_to(signup_path)
-#         end
-#     
-#         it &quot;does not call the action&quot; do
-#           controller.should_not_receive(action)
-#           send method, action, params
-#         end
-#       end
-#   
-#       describe controller_class, &quot;when logged in&quot; do
-#         before do
-#           login_with_user
-#         end
-#         
-#         it &quot;calls the action&quot; do
-#           controller.should_receive(action)
-#           send method, action, params
-#         end
-#       end
-#     end
-#   end
-#   
-#   def self.it_requires_a_superuser(method, action, params={})
-#     describe controller_class, &quot;#{method} ##{action} requires a superuser to be logged in&quot; do
-#       before do
-#         stub_before_filters! :except =&gt; :superuser_required
-#       end
-#       
-#       describe controller_class, &quot;when a user is not logged in&quot; do
-#         it &quot;redirects the user to the signup page&quot; do
-#           send method, action, params
-#           response.should redirect_to(signup_path)
-#         end
-#     
-#         it &quot;sets an error message telling them that they need to log in or sign up&quot; do
-#           send method, action, params
-#           flash[:error].should == &quot;You need to sign up or log in before you can do that.&quot;
-#         end
-#       end 
-# 
-#       describe controller_class, &quot;when a user is logged in but is not a superuser&quot; do
-#         before do
-#           login_with_user
-#         end
-#     
-#         it &quot;sets an error message telling the user they don't have access&quot; do
-#           send method, action, params
-#           flash[:error].should =~ /You don't have access to/i
-#         end
-#     
-#         describe controller_class, &quot;when a user came from a referring page&quot; do
-#           before do
-#             @referer = &quot;http://www.google.com&quot;
-#             request.headers[&quot;HTTP_REFERER&quot;] = @referer
-#           end
-#       
-#           it &quot;redirects the user :back to the referring page&quot; do
-#             send method, action, params
-#             response.should redirect_to(@referer)
-#           end
-#         end
-#     
-#         describe controller_class, &quot;when a user did not come from a referring page&quot; do
-#           before do
-#             request.headers[&quot;HTTP_REFERER&quot;] = nil
-#           end
-# 
-#           it &quot;redirects the user to their home page&quot; do
-#             send method, action, params
-#             response.should redirect_to(home_path)
-#           end
-#         end
-#       end
-#       
-#       describe controller_class, &quot;when a superuser is logged in&quot; do
-#         before do
-#           user = login_with_user
-#           user.stub!(:superuser?).and_return(true)
-#         end
-#         
-#         it &quot;calls the action&quot; do
-#           controller.should_receive(action)
-#           send method, action, params
-#         end
-#       end
-#       
-#     end
-#   end
-# end
+module Spec::Example::ExampleGroupMethods
+  def it_delegates(*args)
+    options = args.extract_options!
+    methods = args
+    src = options[:on]
+    to = options[:to]
+    raise &quot;Missing an object to call the method on, pass in :on&quot; unless src
+    raise &quot;Missing an object to ensure the method delegated to, pass in :to&quot; unless to
+
+    method_options = options.reject{|k,v| [:on, :to].include?(k)}
+    methods.each {|m| method_options[m] = m}
+    method_options.each do |source_method, to_method|
+      it &quot;delegates ##{source_method} to @#{to}.#{to_method}&quot; do
+        obj = instance_variable_get &quot;@#{to}&quot;
+        _src = instance_variable_get &quot;@#{src}&quot;
+        return_val = stub(&quot;return val&quot;)
+        obj.should_receive(to_method).and_return(return_val)
+        _src.send!(source_method).should == return_val
+      end
+    end
+  end
+  
+  def it_provides_liquid_methods(*methods)
+    it &quot;defines ##{self.described_type}::LiquidDrop (declare liquid_methods to do this automatically)&quot; do
+      self.class.described_type.const_defined?(:LiquidDrop).should be_true
+    end
+    
+    if self.described_type.const_defined?(:LiquidDrop)
+      klass = self.described_type::LiquidDrop
+      describe klass do
+        before do
+          @presenter = stub(&quot;presenter&quot;)
+          @drop = klass.new(@presenter)
+        end
+        methods.each do |method|
+          it &quot;provides ##{method} to liquid&quot; do
+            return_value = stub(&quot;return value&quot;)
+            @presenter.should_receive(method).and_return(return_value)
+            @drop.send(method).should == return_value
+          end
+        end
+      end
+    end
+  end
+
+  def it_has_accessors(attribute, options)
+    on_variable_name = options[:on]
+    raise &quot;Missing an object to call the method on, pass in :on&quot; unless on_variable_name
+
+    it &quot;has accessors for ##{attribute}&quot; do
+      on = instance_variable_get &quot;@#{on_variable_name}&quot;
+      on.send(&quot;#{attribute}=&quot;, :the_value)
+      on.send(attribute).should == :the_value
+    end
+    
+    if options.keys.include?(:default)
+      it &quot;defaults ##{attribute} to #{options[:default].inspect}&quot; do
+        on = instance_variable_get &quot;@#{on_variable_name}&quot;
+        on.send(attribute).should == options[:default]
+      end
+    end
+  end
+  alias_method :it_has_accessor, :it_has_accessors
+  
+end
+
+class Spec::Rails::Example::ViewExampleGroup
+  def self.it_renders_a_link_to_unless_current(named_route)
+    describe &quot;when #{named_route} is the current page&quot; do
+      it &quot;does not render a link to the #{named_route} page&quot; do
+        render_it
+        response.should have_tag(&quot;a[href=?]&quot;, send(named_route))
+      end
+    end
+    
+    describe &quot;when #{named_route} is not the current page&quot; do
+      it &quot;renders a link to the #{named_route}&quot; do
+        template.stub!(:current_page?).and_return(true)
+        render_it
+        response.should_not have_tag(&quot;a[href=?]&quot;, send(named_route))
+      end
+    end
+  end
+
+
+  def self.it_renders_javascript_tags_for(*jsfiles)
+    if jsfiles.include?(:defaults)
+      jsfiles.delete(:defaults)
+      jsfiles += [:prototype, :effects, :dragdrop, :controls]
+    end
+    jsfiles.each do |jsfile|
+      it &quot;renders a javascript tag for #{jsfile}.js&quot; do
+        render_it
+        response.should have_tag('script[src*=?][type=text/javascript]', &quot;#{jsfile}.js&quot;)
+      end
+    end
+  end
+  
+  def self.it_renders_stylesheet_link_tags_for(*cssfiles)
+    options = cssfiles.extract_options!
+    media = options[:media] || &quot;screen&quot;
+    cssfiles.each do |cssfile|
+      it &quot;renders a link tag for #{cssfile}.css&quot; do
+        render_it
+        response.should have_tag('link[href*=?][media=?][rel=stylesheet][type=text/css]', &quot;#{cssfile}.css&quot;, media)
+      end
+    end
+  end
+  
+  def self.it_does_not_render_stylesheet_link_tags_for(*cssfiles)
+    cssfiles.each do |cssfile|
+      it &quot;does not render a link tag for #{cssfile}.css&quot; do
+        render_it
+        response.should_not have_tag('link[href*=?][rel=stylesheet][type=text/css]', &quot;#{cssfile}.css&quot;)
+      end
+    end
+  end
+  
+  def self.it_renders_error_messages_for(*models)
+    models.each do |model|
+      it &quot;renders error messages for #{model}&quot; do
+        instance = instance_variable_get &quot;@#{model}&quot;
+        errors = stub(&quot;Errors&quot;, :count =&gt; 1, :full_messages =&gt; [&quot;attribute1 error1&quot;])
+        instance.stub!(:errors).and_return(errors)
+        render_it
+        response.should have_tag(&quot;#errorExplanation&quot;, &quot;attribute1 error1&quot;.to_regexp)
+      end
+    end
+  end
+end
+
+module Spec::Example::ExampleGroupMethods
+  def model_class
+    self.described_type
+  end
+
+  def it_requires attribute
+    it &quot;requires #{attribute}&quot; do
+       model = self.class.model_class.new
+       assert_validates_presence_of model, attribute
+    end
+  end
+
+  def it_protects attribute
+    it &quot;protects #{attribute} from mass assignment&quot; do
+      default_value = self.class.model_class.new[attribute]
+      model = self.class.model_class.new(attribute =&gt; !default_value)
+      model[attribute].should == default_value
+    end
+  end
+
+  def it_validates_uniqueness_of attribute, options
+    it &quot;validates the uniqueness of #{attribute}&quot; do
+      model = self.class.model_class.new
+      if options[:values]
+        options[:values].each_pair do |attribute, value|
+          model[attribute] = value
+        end
+      else
+        model[attribute] = options[:value]
+      end
+      assert_attribute_invalid model, attribute
+    end
+
+    if options[:allow_nil]
+      it &quot;doesn't enforce uniqueness on #{attribute} when it is nil&quot; do
+        assert self.class.model_class.count(:conditions =&gt; {attribute =&gt; nil}) &gt; 0, &quot;must have a record where #{attribute} is nil to check this validation&quot;
+        model = self.class.model_class.new
+        model[attribute] = nil
+        assert_attribute_valid model, attribute
+      end
+    else
+      it &quot;enforces uniqueness on #{attribute} when it is nil&quot; do
+        model = self.class.model_class.new
+        model[attribute] = nil
+        assert_attribute_invalid model, attribute
+      end
+    end
+  end
+
+  def it_validates_inclusion_of attribute, options
+    options[:exclusions].each do |exclusion|
+      it &quot;does not allow #{attribute} to have a value of #{exclusion.inspect}&quot; do
+        model = self.class.model_class.new
+        model[attribute] = exclusion
+        assert_attribute_invalid(model, attribute)
+      end
+    end
+    options[:inclusions].each do |inclusion|
+      it &quot;allows #{attribute} to have a value of #{inclusion.inspect}&quot; do
+        model = self.class.model_class.new
+        model[attribute] = inclusion
+        assert_attribute_valid(model, attribute)
+      end
+    end
+  end
+
+  def it_has_one association, options={}
+    it &quot;has one #{association}&quot; do
+      self.class.model_class.should have_association(:has_one, association.to_sym, options)
+    end
+  end
+
+
+  def it_has_many association, options={}
+    it &quot;has many #{association}&quot; do
+      self.class.model_class.should have_association(:has_many, association.to_sym, options)
+    end
+  end
+
+  def it_belongs_to association, options={}
+    a_or_an = association.to_s =~ /^[aeiou]/i ? &quot;an&quot; : &quot;a&quot;
+    it &quot;belongs to #{a_or_an} #{association}&quot; do
+      self.class.model_class.should have_association(:belongs_to, association.to_sym, options)
+    end
+  end
+
+end
+
+class Spec::Rails::Example::ControllerExampleGroup  
+  def self.controller_class
+    self.described_type
+  end
+  
+  class &lt;&lt; self
+    def it_hides_the_actions(*actions)
+      actions.each do |action|
+        it &quot;hides the action ##{action}&quot; do
+          controller.class.hidden_actions.should include(action.to_s)
+        end
+      end
+    end
+    alias_method :it_hides_the_action, :it_hides_the_actions
+  end
+  
+  def self.it_does_not_require_login(method, action)
+    it_skips_before_filter(:login_required, action)
+  end
+  
+  def self.it_skips_before_filter(filter, action)
+    describe controller_class, &quot;##{action}&quot; do
+      it &quot;skips the '#{filter}' before filter&quot; do
+        filter_not_present_or_exluded(filter, action).should be_true
+      end
+          
+      def filter_not_present_or_exluded(filter, action)
+        filter = controller.class.find_filter(filter)
+        if filter
+          controller.class.filter_excluded_from_action?(filter, action.to_s)
+        else
+          true
+        end
+      end
+    end
+  end
+  
+  def self.it_requires_login(method, action, params={})
+    describe controller_class, &quot;#{method} ##{action} requires login&quot; do
+      before do
+        stub_before_filters! :except =&gt; :login_required
+      end
+      
+      describe controller_class, &quot;when not logged in&quot; do
+        it &quot;redirects to signup&quot; do
+          send method, action, params
+          response.should redirect_to(signup_path)
+        end
+    
+        it &quot;does not call the action&quot; do
+          controller.should_not_receive(action)
+          send method, action, params
+        end
+      end
+  
+      describe controller_class, &quot;when logged in&quot; do
+        before do
+          login_with_user
+        end
+        
+        it &quot;calls the action&quot; do
+          controller.should_receive(action)
+          send method, action, params
+        end
+      end
+    end
+  end
+  
+  def self.it_requires_a_superuser(method, action, params={})
+    describe controller_class, &quot;#{method} ##{action} requires a superuser to be logged in&quot; do
+      before do
+        stub_before_filters! :except =&gt; :superuser_required
+      end
+      
+      describe controller_class, &quot;when a user is not logged in&quot; do
+        it &quot;redirects the user to the signup page&quot; do
+          send method, action, params
+          response.should redirect_to(signup_path)
+        end
+    
+        it &quot;sets an error message telling them that they need to log in or sign up&quot; do
+          send method, action, params
+          flash[:error].should == &quot;You need to sign up or log in before you can do that.&quot;
+        end
+      end 
+
+      describe controller_class, &quot;when a user is logged in but is not a superuser&quot; do
+        before do
+          login_with_user
+        end
+    
+        it &quot;sets an error message telling the user they don't have access&quot; do
+          send method, action, params
+          flash[:error].should =~ /You don't have access to/i
+        end
+    
+        describe controller_class, &quot;when a user came from a referring page&quot; do
+          before do
+            @referer = &quot;http://www.google.com&quot;
+            request.headers[&quot;HTTP_REFERER&quot;] = @referer
+          end
+      
+          it &quot;redirects the user :back to the referring page&quot; do
+            send method, action, params
+            response.should redirect_to(@referer)
+          end
+        end
+    
+        describe controller_class, &quot;when a user did not come from a referring page&quot; do
+          before do
+            request.headers[&quot;HTTP_REFERER&quot;] = nil
+          end
+
+          it &quot;redirects the user to their home page&quot; do
+            send method, action, params
+            response.should redirect_to(home_path)
+          end
+        end
+      end
+      
+      describe controller_class, &quot;when a superuser is logged in&quot; do
+        before do
+          user = login_with_user
+          user.stub!(:superuser?).and_return(true)
+        end
+        
+        it &quot;calls the action&quot; do
+          controller.should_receive(action)
+          send method, action, params
+        end
+      end
+      
+    end
+  end
+end</diff>
      <filename>spec/spec_helpers/it_helpers.rb</filename>
    </modified>
    <modified>
      <diff>@@ -15,10 +15,6 @@ describe &quot;/projects/_navigation.html.erb&quot; do
     response.should have_tag(&quot;a[href=?]&quot;, workspace_project_path(@project))
   end
   
-  it &quot;displays a link to the project's iterations&quot; do
-    response.should have_tag(&quot;a[href=?]&quot;, iterations_path(@project))
-  end
-  
   it &quot;displays a link to the project's stories&quot; do
     response.should have_tag(&quot;a[href=?]&quot;, stories_path(@project))
   end</diff>
      <filename>spec/views/projects/_navigation.html.erb_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>app/controllers/iterations_controller.rb</filename>
    </removed>
    <removed>
      <filename>app/views/iterations/current.html.erb</filename>
    </removed>
    <removed>
      <filename>app/views/iterations/edit.html.erb</filename>
    </removed>
    <removed>
      <filename>app/views/iterations/index.html.erb</filename>
    </removed>
    <removed>
      <filename>app/views/iterations/new.html.erb</filename>
    </removed>
    <removed>
      <filename>app/views/iterations/show.html.erb</filename>
    </removed>
    <removed>
      <filename>app/views/iterations/stories.js.rjs</filename>
    </removed>
    <removed>
      <filename>app/views/projects/_iterations_sidebar.html.erb</filename>
    </removed>
    <removed>
      <filename>spec/controllers/iterations_controller_spec.rb</filename>
    </removed>
    <removed>
      <filename>spec/views/iterations/stories.js.rjs_spec.rb</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>40f160204ec35a8f7d393daa774fe43f94873be8</id>
    </parent>
  </parents>
  <author>
    <name>Zach Dennis</name>
    <email>zach.dennis@gmail.com</email>
  </author>
  <url>http://github.com/zdennis/strac/commit/47a9ea1a66cb9f734af63be87e1b7a9d2ef31c6a</url>
  <id>47a9ea1a66cb9f734af63be87e1b7a9d2ef31c6a</id>
  <committed-date>2008-03-02T22:14:40-08:00</committed-date>
  <authored-date>2008-03-02T22:14:40-08:00</authored-date>
  <message>Removed the IterationsController.
* removed most of the iterations view templates, but left a couple which were being used by the stories tag based view
* left the iterations helper, but dumbed it down until it can be removed
* uncommented some spec it_helpers</message>
  <tree>df11ae0f815f73cf31bf5fe1fc0f7b0c60a1d130</tree>
  <committer>
    <name>Zach Dennis</name>
    <email>zach.dennis@gmail.com</email>
  </committer>
</commit>
